[英]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'")
您可能想刪除引號和/或將記錄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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.