Python日志记录级别似乎不起作用

时间:2017-12-24 20:19:12

标签: python python-2.7 logging

我想将信息级别信息记录到文件并将调试级别信息记录到控制台。我使用StreamHandlers,但logging.infologging.debug都登录到控制台和文件。我希望控制台只显示test1,文件只显示test

import logging
import os

rootLogger_file = logging.getLogger()
rootLogger_file.setLevel(logging.INFO)

rootLogger_console = logging.getLogger()
rootLogger_console.setLevel(logging.DEBUG)

fileHandler = logging.FileHandler('info', "w")

rootLogger_file.addHandler(fileHandler)

consoleHandler = logging.StreamHandler()
rootLogger_console.addHandler(consoleHandler)

rootLogger_file.info('test')
rootLogger_console.debug('test1')

1 个答案:

答案 0 :(得分:3)

您只创建了一个级别为DEBUG的记录器,并且您正在为其添加两个处理程序。来自docs

  

对具有相同名称的getLogger()的多次调用将始终返回对同一Logger对象的引用。

f = logging.getLogger()
f.setLevel(logging.INFO)

c = logging.getLogger()  # returns the same object as before!
c.setLevel(logging.DEBUG)

f is c
# True  # f and c are the same object!

f.level
# 10  # DEBUG
c.level
# 10  # DEBUG

由于您拥有的一个记录器具有级别DEBUG(这意味着它还记录INFO和所有其他级别)并且由两个处理程序拾取,因此两个消息都显示在控制台和文件中。你必须在创作时给他们不同的名字:

f = logging.getLogger('f')
f.setLevel(logging.INFO)
c = logging.getLogger('c')
c.setLevel(logging.DEBUG)
# ...
f.info('test')  # logs to file
c.debug('test1') # logs to console