为什么非根记录器不将任何日志写入日志文件?
Why non-root logger is not writing any log to log file?
我想使用两个带有以下 .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 文件。如果我做了一些愚蠢的事情,请纠正我...
您将记录器对象命名为 '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
原来问题出在这一行(在[logger_teja]
段):
qualname='tejaLogger'
如果将此添加到代码中(它会打印所有当前记录器):
print(logging.Logger.manager.loggerDict)
你得到:
{"'tejaLogger'": <logging.Logger object at 0x7f89631170b8>}
这意味着您的记录器的字面意思是 'tejaLogger'
。使用:
logger2=logging.getLogger("'tejaLogger'")`
实际上工作正常。要么这样做,要么将 qualname='tejaLogger'
更改为 qualname=teja
。
我想使用两个带有以下 .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 文件。如果我做了一些愚蠢的事情,请纠正我...
您将记录器对象命名为 '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
原来问题出在这一行(在[logger_teja]
段):
qualname='tejaLogger'
如果将此添加到代码中(它会打印所有当前记录器):
print(logging.Logger.manager.loggerDict)
你得到:
{"'tejaLogger'": <logging.Logger object at 0x7f89631170b8>}
这意味着您的记录器的字面意思是 'tejaLogger'
。使用:
logger2=logging.getLogger("'tejaLogger'")`
实际上工作正常。要么这样做,要么将 qualname='tejaLogger'
更改为 qualname=teja
。