oslo_log日志格式配置修改后控制台输出未生效问题咨询
问题原因
- 配置调用顺序错误
oslo_log的log.set_defaults()方法必须在log.register_options(CONF)之前调用。register_options会将日志相关配置项的默认值加载到CONF对象中,先注册再修改默认值的操作不会同步到已经完成注册的CONF对象,后续log.setup()读取的仍是CONF中存储的原始默认配置。 - 配置项对应错误
你修改的_DEFAULT_LOGGING_CONTEXT_FORMAT对应的是logging_context_format_string配置项,该格式仅在存在请求上下文的场景下生效,你当前测试用的无上下文普通日志,默认使用的是logging_default_format_string配置项,修改的配置本身就不适用于当前场景。
修复方案
调整配置调用顺序,同时修改普通日志对应的格式配置即可,修复后代码如下:
from oslo_config import cfg from oslo_log import log CONF = cfg.CONF DOMAIN = "demo" # 提前定义所需配置 _DEFAULT_LOG_FORMAT = ('%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s') _DEFAULT_LOG_LEVELS = ['demo=INFO'] # 先修改默认值,再注册配置 log.set_defaults(default_log_levels=_DEFAULT_LOG_LEVELS, logging_default_format_string=_DEFAULT_LOG_FORMAT) log.register_options(CONF) LOG = log.getLogger(__name__) log.setup(CONF, DOMAIN) LOG.info("Welcome to Oslo Logging") LOG.debug("A debugging message") LOG.warning("A warning occurred") LOG.error("An error occurred")
如果不想调整调用顺序,也可以在log.register_options执行后、log.setup执行前,直接修改CONF的对应配置项:
CONF.logging_default_format_string = _DEFAULT_LOG_FORMAT
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

