首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法更改oslo_log日志格式

无法更改oslo_log日志格式
EN

Stack Overflow用户
提问于 2021-10-05 14:50:23
回答 1查看 54关注 0票数 0

我试图为oslo_log.log配置日志格式,让日志上下文包含文件名和行号。

日志配置似乎已更改,但控制台上的输出保持不变。

代码语言:javascript
复制
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()的输出:

代码语言:javascript
复制
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()输出:

代码语言:javascript
复制
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

为什么对象日志的行为与配置未更改时的行为相同?

EN

回答 1

Stack Overflow用户

发布于 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.configsset_override覆盖它。

例如:

邮件CONF.set_override('logging_default_format_string',‘%(递增时间)s,%(毫秒)d%(级别名称)-8s%(文件名)s:%(

)d%(邮件)s’)

或者你可以在你的配置文件中设置它,例如

代码语言:javascript
复制
[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

作为奖励,这是一个完整的例子。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69452667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档