我有一个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__
的使用并没有像所描述的那样工作。
答案 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
相同文件的 附加到每个记录器,而不是一次附加到根记录器,我有些担心。通常,我不建议将日志记录设置代码复制到每个源代码文件和记录器,而建议在单独的文件中配置一次根记录器。