Python 为什么根日志记录器接受来自子日志记录器的日志?
我不理解根记录器和子记录器之间的交互:Python 为什么根日志记录器接受来自子日志记录器的日志?,python,python-2.7,logging,Python,Python 2.7,Logging,我不理解根记录器和子记录器之间的交互: import logging formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 1. SOME LOGGER logger = logging.getLogger( 'logger' ) logger.setLevel(logging.INFO) # 2. ROOT LOGGER rootLogger = logging.g
import logging
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 1. SOME LOGGER
logger = logging.getLogger( 'logger' )
logger.setLevel(logging.INFO)
# 2. ROOT LOGGER
rootLogger = logging.getLogger()
rootLogger.setLevel( logging.CRITICAL )
fh = logging.FileHandler('root.log')
fh.setLevel( logging.DEBUG )
fh.setFormatter(formatter)
rootLogger.addHandler(fh)
#
logger.info( 'hello' )
最后一行logger.info('hello')
应该是
- 被
接受,因为它具有logger
logger.setLevel(logging.INFO)
- 被
拒绝,因为它具有rootLogger
rootLogger.setLevel(logging.CRITICAL)
但是在脚本的末尾,我有一个文件
root.log
包含hello
。为什么临界
级别不阻止根记录器
的消息?之所以发生这种情况,是因为记录器
对象仅继承您分配给根记录器
的文件处理程序
对象,而不是日志级别。您的Logger
对象设置自己的日志级别,因此根本不会使用父级的日志级别。这意味着通过记录器
进行日志记录将检查记录器
本身的日志级别(即信息
),然后检查继承的文件处理程序
(即调试
)的日志级别-它不检查父根记录器
对象的日志级别。由于logger
和FileHandler
都设置为INFO
级别或更高级别,因此您可以看到'hello'
获取日志
如果不希望logger
从rootLogger
继承处理程序,请在logger
对象上将属性设置为“0”:
logger = logging.getLogger( 'logger' )
logger.setLevel(logging.INFO)
logger.propagate = 0
如果希望子日志记录器继承父日志级别,请将子日志级别设置为NOTSET
:
logger = logging.getLogger( 'logger' )
logger.setLevel(logging.NOTSET)