gpt4 book ai didi

python - 跨多个文件共享 Python 记录器

转载 作者:行者123 更新时间:2023-12-03 09:40:10 30 4
gpt4 key购买 nike

我有一个 python 应用程序,其文件结构类似于以下内容:

/Project
file1.py
file2.py
file3.py
...

该应用程序使用 Python 2.6,因为它在 CentOS 6 环境中运行。

我有兴趣建立一个通用的日志记录机制,其中每个文件的日志语句写入磁盘上的同一个日志文件。这些 python 文件通常从命令行执行,彼此之间有些独立。文档( linked here )中的一项建议是我测试过的以下内容:
log = logging.getLogger(__name__)

我发现所有日志行都会被列为来自 __main__ ,无论日志语句来自哪个文件。换句话说,我无法判断给定的日志行来自哪个文件。

我希望能够得到一个包含类似于以下内容的日志文件:
2017-01-17 10:48:47,446 - file1 - DEBUG - this is from file1
2017-01-17 10:48:47,447 - file2 - DEBUG - this is from file2
2017-01-17 10:48:47,447 - fiel3 - DEBUG - this is from file3

在上面,我会执行:
log.debug("this is from file1")

file1.py和其他文件中类似的日志行,适本地替换日志语句中的文本。

我目前正在使用以下内容来设置日志记录:
########################################
# Setup Logging
########################################
LOG_FILENAME = 'app.log'
# Set up a specific logger with our desired output level
log = logging.getLogger('Logger')
log.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(
LOG_FILENAME, maxBytes=200000000, backupCount=5)
handler.setFormatter(formatter)
log.addHandler(handler)
########################################

这种设置非常适合从一个 python 源进行日志记录,但不太有用,因为我现在试图从多个 python 源进行日志记录

我已阅读 Using Python logging in multiple modules ;它有很好的答案,但由于我项目中文件的独立性,使用 __name__没有按照描述工作。

最佳答案

最佳方法
而不是试图将记录器名称设置为文件名,只需指定 %(module)s !

formatter = logging.Formatter('%(asctime)s - %(module)s - %(levelname)s - %(message)s')
^^^^^^^^^^
这将避免打印 __main__并很好地给你:
2020-11-06 23:19:03,827 - file2 - INFO - This is from file2
2020-11-06 23:19:03,827 - file3 - INFO - This is from file3
2020-11-06 23:19:03,827 - file1 - INFO - This is from file1
享受!

PS:我有点紧张你附上 RotatingFileHandler同一个文件到每个记录器,而不是一次到根记录器。一般来说,我不建议将日志设置代码复制到每个源代码文件和记录器,而是在单独的文件中配置一次根记录器。

关于python - 跨多个文件共享 Python 记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41814988/

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