我想记录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>
我该如何解决这个问题?
答案 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')
行记录任何内容。