2017-02-27 15 views
2

我试过一个简单的例子,根据官方记录食谱但结果却是出乎意料:用简单的例子Python记录烦恼

In [2]: logger.info("hello") 
In [3]: logger.error("bad") 

后来:

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) 

然后我在一个控制台写

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”日志记录。

回答

3

这可能意味着你的logger的自己的水平高于logging.INFO(20)。该值从父logger继承:手动

>>> 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 

设置日志级别:

>>> logger.setLevel(logging.DEBUG) 
>>> logger.getEffectiveLevel() 
10 

现在info日志将有所回升。来自Logger.getEffectiveLeveldocs

指示此记录器的有效等级。如果使用setLevel()设置了NOTSET以外的值,则返回该值。否则,层次结构向根遍历,直到比NOTSET其他找到一个值,并将该值返回

在别处:

注意,根记录与警告级别创建。

+0

感谢您的完美解释。 –