为什么非root logger没有将任何日志写入日志文件?

时间:2015-02-27 10:15:34

标签: python file logging handlers

我想使用两个带有以下.ini配置文件的记录器写入两个日志文件:

[loggers]
keys=root,teja

[handlers]
keys=fileHandler,tejaFileHandler

[formatters]
keys=simpleFormatter

[logger_teja]
level=DEBUG
handlers=tejaFileHandler
qualname='tejaLogger'


[logger_root]
level=DEBUG
handlers=fileHandler

[handler_fileHandler]
class=logging.FileHandler
level=DEBUG
formatter=simpleFormatter
args=("error.log", "a")

[handler_tejaFileHandler]
class=logging.FileHandler
level=DEBUG
formatter=simpleFormatter
args=("teja.log", "a")

[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

我在我的python代码中使用此配置为

import logging
import logging.config
# load my module

import my_module

# load the logging configuration

logging.config.fileConfig('logging.ini')

logger1=logging.getLogger('root')
logger1.info('Hi how are you?')

logger2=logging.getLogger('teja')
logger2.debug('checking teja logger?')

我看到日志被写入error.log文件,而没有日志写入teja.log文件。如果我做的话傻话,请纠正我......

2 个答案:

答案 0 :(得分:2)

您将记录器对象命名为'tejaLogger'

[logger_teja]
level=DEBUG
handlers=tejaFileHandler
qualname='tejaLogger'
#        ^^^^^^^^^^^^

请注意,引号是名称的一部分。

但您的测试代码选择了teja

logger2=logging.getLogger('teja')

重命名其中一个;虽然你可以使用logging.getLogger("'tejaLogger'")  您可能希望删除引号和/或将记录器重命名为您预期的值:

[logger_teja]
level=DEBUG
handlers=tejaFileHandler
qualname=teja

答案 1 :(得分:1)

事实证明问题出在这一行([logger_teja]部分):

qualname='tejaLogger'

如果将其添加到代码中(它会打印所有当前记录器):

print(logging.Logger.manager.loggerDict)

你得到:

{"'tejaLogger'": <logging.Logger object at 0x7f89631170b8>}

这意味着您的记录器按字面'tejaLogger'进行调用。使用:

logger2=logging.getLogger("'tejaLogger'")`

实际上工作正常。要么这样做,要么将qualname='tejaLogger'更改为qualname=teja