Python日志问题与简单示例
我尝试了一个基于官方日志记录食谱的简单示例,但结果出乎意料:Python日志问题与简单示例,python,logging,Python,Logging,我尝试了一个基于官方日志记录食谱的简单示例,但结果出乎意料: LOG_PATH = 'logs' logger = logging.getLogger(__name__) # Creates 2 Handlers to split log levels info_fh = logging.FileHandler(path.join(LOG_PATH, 'info_level.log')) info_fh.setLevel(logging.INFO) err_fh = logging.File
LOG_PATH = 'logs'
logger = logging.getLogger(__name__)
# Creates 2 Handlers to split log levels
info_fh = logging.FileHandler(path.join(LOG_PATH, 'info_level.log'))
info_fh.setLevel(logging.INFO)
err_fh = logging.FileHandler(path.join(LOG_PATH, 'err_level.log'))
err_fh.setLevel(logging.ERROR)
# Create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
info_fh.setFormatter(formatter)
err_fh.setFormatter(formatter)
# add the handlers to logger
logger.addHandler(info_fh)
logger.addHandler(err_fh)
然后我在控制台中写下:
In [2]: logger.info("hello")
In [3]: logger.error("bad")
后来:
cat logs/err_level.log
>>> 2017-02-27 13:16:40,328 - jive - ERROR - bad
cat logs/info_level.log
>>> 2017-02-27 13:16:40,328 - jive - ERROR - bad
我不明白为什么info_level.log文件不包含“hello”日志记录。这可能意味着您的
记录器的自身级别高于logging.info
(20)。此值继承自父记录器:
>>> logger.level
0 # that means it is not set
>>> logging.NOTSET
0
>>> logger.getEffectiveLevel()
30 # value of parent because not set
>>> logger.parent.level
30
>>> logging.INFO
20 # < logger.getEffectiveLevel() -> not picked up
现在将拾取info
日志。从记录器。getEffectiveLevel
:
指示此记录器的有效级别。如果使用setLevel()设置了NOTSET以外的值,则返回该值。否则,将向根遍历层次结构,直到找到NOTSET以外的值,并返回该值
其他地方:
请注意,创建根记录器时带有级别警告
谢谢你的完美解释。
>>> logger.setLevel(logging.DEBUG)
>>> logger.getEffectiveLevel()
10