没有找到与__main__相对应的处理程序

13

我使用一个logconfig.ini文件,在我的Python包中设置了日志记录。

[loggers]
keys=extracts,root

[formatters]
keys=simple,detailed

[handlers]
keys=file_handler

[formatter_simple]
format=%(module)s - %(levelname)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S

[formatter_detailed]
format=%(asctime)s %(name)s:%(lineno)s %(levelname)s %(message)s
datefmt=%Y-%m-%d %H:%M:%S

[handler_file_handler]
class=logging.handlers.RotatingFileHandler
level=DEBUG
formatter=detailed
args=('/ebs/logs/foo.log', 'a', 100000000, 3)

[logger_extracts]
level=DEBUG
handlers=file_handler
propagate=1
qualname=extracts

[logger_root]
level=NOTSET
handlers=

但是每当我运行我的应用程序时,我会在提示框中收到以下警告消息:

No handlers found for logger __main__

我该如何修复这个问题?


你是如何调用日志记录器的?我的意思是,在 import logging 之后,你是如何创建一个日志记录器的?如果可能的话,请包含代码示例。我认为这与日志配置无关。 - helloV
1
LOG = logging.getLogger(name) - Zihs
2个回答

16

你必须首先调用logging.basicConfig()函数:

Logging HOWTO

在调用debug()、info()等任何日志记录函数之前,都应该先调用basicConfig()函数。由于basicConfig()函数旨在作为一次性简单配置工具,因此只有第一个调用实际上会执行操作:随后的调用将被忽略。

或者使用所有的logging.info('Starting logger for...'),它会自动调用logging.basicConfig()函数。因此类似这样:

import logging
logging.info('Starting logger for...') # or call logging.basicConfig()
LOG = logging.getLogger(name)

模块的作者为这种行为提出的原因在此处


我在我的__init__.py文件中调用logging.config.fileConfig(logfile)。 - Zihs
我不想调用BasicConfig。我认为这可能与我的logconfig.ini文件有关,但我无法弄清楚在哪里。 - Zihs

2
我发现了我的错误。 原来主函数使用的是根记录器。 我只需要像这样将处理程序附加到根记录器即可,
[logger_root]
level=NOTSET
handlers=file_handler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接