Python 日志配置文件

49 投票
5 回答
97632 浏览
提问于 2025-04-16 08:31

我在尝试在我的Python项目中实现日志记录时遇到了一些问题。

我想要模仿以下的配置:

Python日志记录到多个目的地

不过,我希望把这些配置放在一个配置文件里,而不是直接写在代码中。

下面是我的配置文件:

[loggers]
keys=root

[logger_root]
handlers=screen,file

[formatters]
keys=simple,complex

[formatter_simple]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

[formatter_complex]
format=%(asctime)s - %(name)s - %(levelname)s - %(module)s : %(lineno)d - %(message)s

[handlers]
keys=file,screen

[handler_file]
class=handlers.TimedRotatingFileHandler
interval=midnight
backupCount=5
formatter=complex
level=DEBUG
args=('logs/testSuite.log',)

[handler_screen]
class=StreamHandler
formatter=simple
level=INFO
args=(sys.stdout,)

问题是,我在屏幕上看到的输出是这样的:
2010-12-14 11:39:04,066 - root - WARNING - 3
2010-12-14 11:39:04,066 - root - ERROR - 4
2010-12-14 11:39:04,066 - root - CRITICAL - 5

我的文件输出也是这样,虽然包含了一些额外的信息。但是,调试和信息级别的日志没有输出到任何地方。

我使用的是Python 2.7

下面是一个简单的例子,展示了我的失败:

import os
import sys
import logging
import logging.config

sys.path.append(os.path.realpath("shared/"))
sys.path.append(os.path.realpath("tests/"))

class Main(object):

  @staticmethod
  def main():
    logging.config.fileConfig("logging.conf")
    logging.debug("1")
    logging.info("2")
    logging.warn("3")
    logging.error("4")
    logging.critical("5")

if __name__ == "__main__":
  Main.main()

5 个回答

7

只需要在 [logger_root] 中添加日志级别就可以了。这样就能正常工作了。

[logger_root]
level=DEBUG
handlers=screen,file
16

在根日志记录器中添加以下这一行解决了我的问题:

level=NOTSET
30

看起来你已经为你的处理器设置了级别,但没有为你的记录器设置。记录器的级别会在消息到达处理器之前进行过滤,默认级别是WARNING及以上(你可以看到)。你把根记录器的级别设置为NOTSET,同时把它设置为DEBUG(或者你想记录的最低级别),这样应该就能解决你的问题。

撰写回答