zoukankan      html  css  js  c++  java
  • 基于oslo_log的日志管理

    oslo_log是openstack中的日志模块,其对python logging的封装,可以快速便捷地写出我们的日志模块。官网上有许多参考示例,但实例永远是实例,其配合oslo_config模块,快捷注册日志,从而获取进程启动运行中的所有日志。官网资料详尽,参考https://docs.openstack.org/oslo.log/。

    1.此处说明一点,关于LOG日志如何写入文件。

    进程启动时,以ceilometer-agent-compute为例,除了有启动的脚本外,还有配置文件 --config-file 和 日志文件 --log-file:

    在程序中,只需要将这些配置注册到oslo_config中,参考ceilometer的源码,编写一个例子,将进程的调用日志记录在文件中。

     1 from oslo_log import log
     2 from oslo_config import cfg
     3 import sys
     4 LOG = log.getLogger(__name__)
     5 
     6 def prepare_service(argv=None, config_file=None):
     7     log.register_options(cfg.CONF)           # 注册配置项
     8     log_level = cfg.CONF.default_log_levels  # 设置默认日志级别INFO
     9     log.set_defaults(default_log_levels=log_level) 
    10     if argv is None:
    11         argv = sys.argv
    12     cfg.CONF(argv[1:], project='ceilometer', default_config_files=config_file) # 将进程中配置文件或日志文件注册在配置项中
    13     log.setup(cfg.CONF, 'ceilometer') #
    14 
    15 def print_log():
    16     LOG.info("===>I LOVE YOU CAESAR<=====")
    17 
    18 prepare_service()
    19 print_log()

    进程启动时,带上日志路径参数,执行完成后,可在日志文件中看到执行结果。

     2.oslo_config对配置项的默认管理,以上通过 --config-file 传入服务配置,--log-file 传入服务日志位置。对于config-file中未配置项,使用默认的配置,其定义、注册和调用,举例说明:

    定义两个配置项 mongo_OPTS和OPTS

    mongo_OPTS = [
        cfg.StrOpt('database',
                   default='mongodb',
                   help='database'),
    
    ]
    OPTS = [
        cfg.IntOpt('max_retries',
                    default=3,
                    help="max connection to database times"
                          ),
        cfg.IntOpt('retry_interval',
                   default=60,
                   help='connection timeout 300 senconds'),
        cfg.StrOpt('connection',
                   default='mongodb+mongodb://196.168.1.111:27017,'
                          '196.168.1.112:27017,'
                          '196.168.1.113:27017/test',
                   help='connection mongodb url')
        ]
    

    将两个配置项分别注册在DEFAULT和mongodb 分组中方法见下:

    def list_opts():
        return [('MONGO',itertools.chain(OPTS)),
                ('DEFAULT', itertools.chain(mongo_OPTS)),
                ]
    
    conf = cfg.ConfigOpts()
    
    for group, options in list_opts():
        conf.register_opts(list(options),
                           group=None if group == "DEFAULT" else group)
    

    注册完成后,即可通过conf.database获取DEFAULT中定义的mongodb,通过conf.MONGO.connection 获取其中connection对应值。

  • 相关阅读:
    layui穿梭框内容溢出解决办法
    location之alias浅析
    Semaphore和SemaphoreSlim实现并发同步
    Barrier实现并发同步
    CountdownEvent实现并发同步
    AutoResetEvent实现并发同步
    TrieTree树
    EncryptByPassPhrase与DecryptByPassPhrase的浅说
    一个mp4转gif的网站
    vue轮播图(可随父元素高宽自适应)
  • 原文地址:https://www.cnblogs.com/CaesarLinsa/p/8729796.html
Copyright © 2011-2022 走看看