使用Python日志记录模块时感到困惑

时间:2015-08-11 22:55:25

标签: python python-2.7 logging

我想记录2个不同的文件,但不同的东西。

我正在尝试这个:

runid = str(uuid.uuid1())
logger = logging.getLogger('logger1')
other_logger = logging.getLogger('logger2')

logger.setLevel(logging.DEBUG)

debug_handler = logging.FileHandler('log/debug.log')
info_handler = logging.FileHandler('log/info.log')
other_handler = logging.FileHandler('log/other_info.log')

debug_handler.setLevel(logging.DEBUG)
info_handler.setLevel(logging.INFO)
other_handler.setLevel(logging.INFO)

formatter = logging.Formatter(runid + ' - %(asctime)s - %(levelname)s - %(funcName)s - %(message)s')
debug_handler.setFormatter(formatter)
info_handler.setFormatter(formatter)
other_handler.setFormatter(formatter)

logger.addHandler(debug_handler)
logger.addHandler(info_handler)
other_logger.addHandler(other_handler)

logger.info('message1')
other_logger.info('message2')

但是logger和other_logger正在一起工作,无论我是在logger还是other_logger中调用,我都会在所有文件中获取这两条消息。

根据文件:

  

"记录器具有以下属性和方法。请注意记录器   永远不会直接实例化,但始终通过模块级别   function logging.getLogger(name)。用getLogger()多次调用   相同的名称将始终返回对同一记录器的引用   。对象"

但是父对象总是一样的,就像在这个小测试中一样:

import logging

log1 = logging.getLogger('hey')
log2 = logging.getLogger('you')

print log1.parent, log2.parent

enrique@enrique-mbp:$ python /tmp/test.py 
<logging.RootLogger object at 0x26f0810> <logging.RootLogger object at 0x26f0810>

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

问题在于:

logger.setLevel(logging.DEBUG)

您还需要设置other_logger的级别:

logger.setLevel(logging.DEBUG)
other_logger.setLevel(logging.DEBUG) # or INFO because that is the lowest level being used by a handler

如果没有这个,other_logger将保持默认的日志记录级别logging.WARNING,这会阻止other_logger.info('message2')行记录任何内容。