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