[英]root logger not respecting log level Python
我试图了解一般的Python日志,我已经创建了一个小代码。
下面是我的主要代码文件:
import logging.config
logging.config.fileConfig('logging-2.conf')
logger = logging.getLogger('main')
import auxillary
logger.info("Info message from main file")
logger.warning("This is a warning message from main file")
我的日志配置文件如下:
[loggers]
keys=root, main
[handlers]
keys=mainhandler, roothandler
[formatters]
keys=mainformatter
[logger_root]
level=ERROR
handlers = roothandler
[logger_main]
level=DEBUG
handlers=mainhandler
qualname=main
propagate=1
[handler_roothandler]
class=StreamHandler
args=(sys.stdout,)
[handler_mainhandler]
class=FileHandler
formatter=mainformatter
args=("main.log",)
[formatter_mainformatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
以下是auxillary.py文件的代码:
import logging
module_logger = logging.getLogger('main.auxiliary')
module_logger.info("Info statement from auxillary function")
module_logger.warning("warning message from auxillary function")
当我运行下面的代码是输出:
Info statement from auxillary function
warning message from auxillary function
Info message from main file
This is a warning message from main file
我的main.log文件的内容如下:
2019-07-28 16:52:05,710 - main.auxiliary - INFO - Info statement from auxillary function
2019-07-28 16:52:05,710 - main.auxiliary - WARNING - warning message from auxillary function
2019-07-28 16:52:05,710 - main - INFO - Info message from main file
2019-07-28 16:52:05,710 - main - WARNING - This is a warning message from main file
换句话说,即使在为根记录器设置日志级别为ERROR之后,它也会打印所有消息。
知道为什么会这样吗? 我应该如何强制根记录器只打印来自错误及以上的消息,即使传播对于它是真的。
这是因为当记录器接收到其级别或更高级别的消息时,它会将消息转发给其处理程序及其祖先处理程序 。
import logging
root_logger = logging.getLogger() # WARNING by default
sub_logger = logging.getLogger('a')
sub_logger.setLevel('INFO')
root_console = logging.StreamHandler()
root_logger.addHandler(root_console)
sub_console = logging.StreamHandler()
sub_logger.addHandler(sub_console)
sub_logger.info('This message is going to the handlers of sub_logger and its ancestor root_logger, thus printed twice')
root_logger.removeHandler(root_console)
sub_logger.info('Again, same logic but root logger no longer has handlers, so printed only once')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.