gpt4 book ai didi

python - 如何在应用程序中配置所有记录器

转载 作者:太空狗 更新时间:2023-10-29 17:30:52 25 4
gpt4 key购买 nike

Python 的日志记录模块允许模块或类定义它们自己的记录器。不同的记录器可以有不同的处理程序。其中一些可能会选择记录到文件,而另一些则选择记录到标准输出。

现在我的应用程序使用了其中的几个模块,每个模块都有自己的记录器,这些记录器具有各种处理程序。我可以统一日志记录行为,以便所有日志都转到我指定的日志文件吗?换句话说,有没有办法从一个地方同时 .config() 所有记录器的处理程序?

最佳答案

您可能应该查看 Python Logging HOWTO了解它是如何工作的。

简而言之,所有模块通常做的就是获取 G_LOG = logging.getLogger('package.name') 形式的记录器并向记录器发送消息:G_LOG.info ('some message'), G_LOG.exception('something bad happened').模块通常不应配置任何内容。

使用模块的应用程序可以打开日志记录并根据记录器名称配置处理程序:

  • 收听所有消息,或者
  • 只听取超过特定阈值的消息,或者
  • 仅监听名称以package 开头的记录器的消息,或者
  • 仅收听名称以 package.name 等开头的记录器的消息

最简单的方法是通过 logging.basicConfig 配置日志记录在你的应用程序开头的某个地方:

logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)-8s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename=log_file, filemode='a')

这样您就可以将来自所有模块的所有日志消息写入log_file

如果您需要更详细的日志记录策略(将来自不同记录器的日志放入不同的文件,或将堆栈跟踪发送到单独的文件),最好定义一个日志记录配置文件并使用 logging.config.dictConfig 配置日志记录或 logging.config.fileConfig

附言我通常创建两个记录器作为模块变量:

G_LOG = logging.getLogger(__name__)
ST_LOG = logging.getLogger('stacktrace.' + __name__)

G_LOG 我只发送单行消息。对于 ST_LOG,我使用 ST_LOG.exception 复制了重要消息,它隐含地具有 exc_info=True 并写入当前异常的堆栈跟踪。

在应用程序开始时,我加载了配置两个记录器(以及它们的两个文件处理程序)的配置:一个接收以 stacktrace 开头的消息并具有 propagate=0(即堆栈跟踪消息在顶部不可见)和处理其余消息的根记录器。我不会将完整的日志配置文件放在这里,因为这是了解其工作原理的有用家庭作业。

关于python - 如何在应用程序中配置所有记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9857284/

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