我试图为oslo_log.log配置日志格式,让日志上下文包含文件名和行号。
日志配置似乎已更改,但控制台上的输出保持不变。
from oslo_config import cfg
from oslo_log import log
import oslo_log
CONF = cfg.CONF
DOMAIN = "demo"
log.register_options(CONF)
LOG = log.getLogger(__name__)
_DEFAULT_LOGGING_CONTEXT_FORMAT = ('%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s')
log.set_defaults(_DEFAULT_LOGGING_CONTEXT_FORMAT, _DEFAULT_LOG_LEVELS)
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")
print(CONF.logging_context_format_string)不带log.set_defaults()的输出:
2021-10-05 10:48:02.438 28234 INFO __main__ [-] Welcome to Oslo Logging
2021-10-05 10:48:02.439 28234 WARNING __main__ [-] A warning occurred
2021-10-05 10:48:02.439 28234 ERROR __main__ [-] An error occurred
%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s使用log.set_defaults()输出:
2021-10-05 10:48:31.376 28246 INFO __main__ [-] Welcome to Oslo Logging
2021-10-05 10:48:31.377 28246 WARNING __main__ [-] A warning occurred
2021-10-05 10:48:31.378 28246 ERROR __main__ [-] An error occurred
%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s为什么对象日志的行为与配置未更改时的行为相同?
发布于 2021-10-06 03:03:15
您正在更改默认上下文日志(也称为logging_context_format_string)的日志格式,该格式用于附加了oslo.context对象的日志行。带有上下文的日志行可以记录更详细的信息;例如执行请求的项目或用户id。这不会影响像这样没有附加上下文的常规日志行。
2021-10-05 10:48:31.378 28246 ERROR main -发生错误
如果您正在尝试更改常规日志行(也称为logging_default_format_string),则需要使用oslo.configs、set_override覆盖它。
例如:
邮件CONF.set_override('logging_default_format_string',‘%(递增时间)s,%(毫秒)d%(级别名称)-8s%(文件名)s:%(
)d%(邮件)s’)
或者你可以在你的配置文件中设置它,例如
[DEFAULT]
log_date_format = %Y-%m-%d %H:%M:%S
logging_context_format_string = %(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s
logging_default_format_string = %(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s您可以为您的项目加载一个这样的配置文件。
cfg.CONF(sys.argv1:,default_config_files='test.conf')
使用log.set_defaults不能做到这一点的原因是,该函数只允许您修改基于上下文的日志行。您可以查看实现here。
作为奖励,这是一个完整的例子。
from oslo_config import cfg
from oslo_log import log
_DEFAULT_LOGGING_CONTEXT_FORMAT = (
'%(asctime)s.%(msecs)03d %(process)d %(levelname)s '
'%(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s'
)
CONF = cfg.CONF
log.register_options(CONF)
LOG = log.getLogger(__name__)
log.setup(CONF, 'test')
CONF.set_override(
'logging_default_format_string', '%(asctime)s,%(msecs)d %(levelname)-8s '
'[%(filename)s:%(lineno)d] %(message)s'
)
log.set_defaults(
logging_context_format_string=_DEFAULT_LOGGING_CONTEXT_FORMAT,
)
# Log something
LOG.info("Welcome to Oslo Logging")
LOG.debug("A debugging message")
LOG.warning("A warning occurred")
LOG.error("An error occurred")
print('logging_default_format_string:', CONF.logging_default_format_string)
print('logging_context_format_string:', CONF.logging_context_format_string)https://stackoverflow.com/questions/69452667
复制相似问题