基於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對應值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM