我想将信息级别信息记录到文件并将调试级别信息记录到控制台。我使用StreamHandlers
,但logging.info
和logging.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')
答案 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