簡體   English   中英

為什么非root記錄器不向日志文件寫入任何日志?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM