简体   繁体   English

为什么非root记录器不向日志文件写入任何日志?

[英]Why non-root logger is not writing any log to log file?

I want to write into two log files by using two loggers with following .ini config 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

And I am using this configuration in my python code as 我在我的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?')

I see that logs are written to error.log file whereas no logs are written to teja.log file. 我看到日志被写入error.log文件,而没有日志被写入teja.log文件。 Please correct me if I am doing something silly... 如果我做傻事,请纠正我。

You named your logger object 'tejaLogger' : 您将记录器对象命名为'tejaLogger'

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

Note that the quotes are part of the name . 请注意, 引号是名称的一部分

but your test code picks up teja instead: 但是您的测试代码改为使用teja

logger2=logging.getLogger('teja')

Rename one or the other; 重命名一个或另一个; although you could use logging.getLogger("'tejaLogger'") you probably want to drop the quotes and / or rename the logger to what you expected it to be: 尽管您可以使用logging.getLogger("'tejaLogger'")您可能想删除引号和/或将记录logging.getLogger("'tejaLogger'")命名为您期望的样子:

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

It turns out that the problem is on this line (in the [logger_teja] section): 事实证明,问题出在这一行(在[logger_teja]部分中):

qualname='tejaLogger'

If you add this to your code (it prints all the current loggers): 如果将此代码添加到代码中(它将打印所有当前的记录器):

print(logging.Logger.manager.loggerDict)

You get: 你得到:

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

Which means that your logger is called literally 'tejaLogger' . 这意味着您的记录器从字面上称为'tejaLogger' Using: 使用:

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

Actually works fine. 实际工作正常。 Either do that, or change qualname='tejaLogger' to qualname=teja . 要么这样做,要么将qualname='tejaLogger'更改为qualname=teja

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM