跨多个文件共享Python记录器

时间:2017-01-23 20:26:59

标签: python logging

我有一个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__的使用并没有像所描述的那样工作。

1 个答案:

答案 0 :(得分:0)

最佳方法

只需指定%(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相同文件的 附加到每个记录器,而不是一次附加到根记录器,我有些担心。通常,我不建议将日志记录设置代码复制到每个源代码文件和记录器,而建议在单独的文件中配置一次根记录器。