gpt4 book ai didi

python - Python 日志记录模块中字段组合的固定长度格式

转载 作者:行者123 更新时间:2023-12-01 19:35:38 27 4
gpt4 key购买 nike

我在我的应用程序中使用 Python 日志记录模块。这是我当前的格式。

LOGGER_FORMAT = '%(asctime)s %(levelname)-5s [%(threadName)-10s] %(name)s.%(module)s.%(funcName)s : %(message)s'
logging.basicConfig(level=logging.INFO, format=LOGGER_FORMAT)

以及示例输出:

2018-03-14 11:35:27,257 INFO  [Thread-2  ] my_app.util.get_login_info : Log line 1
2018-03-14 11:35:27,257 INFO [Thread-2 ] my_app.cache.call : Log line 2
2018-03-14 11:35:27,257 INFO [Thread-2 ] my_app.web.parse_response : Log line 3

我正在寻找的是从固定位置而不是变化的起点显示消息。

我可以为每个单独的属性配置固定长度,但我想为整个 name.module.funcName 部分配置固定长度,以便我的输出如下所示:

2018-03-14 11:35:27,257 INFO  [Thread-2  ] my_app.util.get_login_info : Log line 1
2018-03-14 11:35:27,257 INFO [Thread-2 ] my_app.cache.call : Log line 2
2018-03-14 11:35:27,257 INFO [Thread-2 ] my_app.web.parse_response : Log line 3

这可能吗?我该如何配置?

最佳答案

最好的选择是使用 logging.Filter 例如:

class MyFilter(logging.Filter):
def filter(self, record):
record.expandedFuncName = '%s.%s.%s' % (record.name, record.module, record.funcName)
return True

然后使用类似的格式字符串

%(asctime)s %(levelname)-5s [%(threadName)-10s] %(expandedFuncName)-20.20s : %(message)s

您需要确保此过滤器的实例应用于每个使用格式字符串中包含 expandedFuncName 的格式化程序的处理程序。您无法使用 basicConfig 执行此操作,因此我建议改用 dictConfig 日志记录配置 API。

请注意,如果您按照日志记录文档中的建议使用约定 logger =logging.getLogger(__name__),则记录器名称通常会包含模块名称,但这并不完全适用于__main__ 模块的情况。

关于python - Python 日志记录模块中字段组合的固定长度格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49275602/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com