gpt4 book ai didi

python 日志记录 : Different formatters for the same log file

转载 作者:行者123 更新时间:2023-12-02 09:52:17 24 4
gpt4 key购买 nike

我是 python 日志记录模块的新手。我正在尝试以 html 格式写入日志。我想将所有日志写入同一个文件。所有 INFO 日志都不会有时间戳,而所有其他严重性级别的日志中都会有时间戳。我该怎么做呢?我已经在 python 日志记录手册中看到了示例,但它展示了如何在多个目的地执行此操作。我想知道是否有一种方法可以根据严重性级别指定不同的格式化程序。

https://docs.python.org/2/howto/logging-cookbook.html#logging-to-multiple-destinations

最佳答案

是的,这是可能的,而且我经常做这种事情。我经常感到惊讶的是,文档中没有更频繁地给出这一点作为示例。您可以设置类似的方法来创建自定义 Formatter根据日志消息的级别使用不同的格式。有几种方法可以解决这个问题。这个特定的示例有点 hacky,但允许重用 Formatter 基类中的大部分代码,只需包装多个格式化程序并根据日志级别选择要使用的一个即可:

class LevelFormatter(logging.Formatter):
def __init__(self, fmt=None, datefmt=None, level_fmts={}):
self._level_formatters = {}
for level, format in level_fmts.items():
# Could optionally support level names too
self._level_formatters[level] = Formatter(fmt=format, datefmt=datefmt)
# self._fmt will be the default format
super(LevelFormatter, self).__init__(fmt=fmt, datefmt=datefmt)

def format(self, record):
if record.levelno in self._level_formatters:
return self._level_formatters[record.levelno].format(record)

return super(LevelFormatter, self).format(record)

然后你可以这样使用:

formatter = LevelFormatter(fmt='<default log format>', level_fmts={logging.INFO: '<format string for info>'})
handler.setFormatter(formatter)

这只是您可以迭代的一种方法。人们可以很容易地想到其他人。

关于python 日志记录 : Different formatters for the same log file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28635679/

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