簡體   English   中英

我可以在沒有root logger的情況下使用logging.ini文件嗎?

[英]Can I have logging.ini file without root logger?

以下是我的logging.ini文件的樣子:

[loggers]
keys=teja

[handlers]
keys=fileHandler

[formatters]
keys=simpleFormatter

[logger_teja]
level=DEBUG
handlers=fileHandler
qualname=tejaLogger

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

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

我收到了以下錯誤:

File "test.py", line 22, in <module>
    logging.config.fileConfig('logging.ini')
  File "/usr/lib/python2.7/logging/config.py", line 79, in fileConfig
    _install_loggers(cp, handlers, disable_existing_loggers)
  File "/usr/lib/python2.7/logging/config.py", line 183, in _install_loggers
    llist.remove("root")
ValueError: list.remove(x): x not in list

請幫我解決問題。 或者請解釋一下“為什么總是需要包含root logger?”

如果您使用源 ,您將看到必須配置根記錄器:

# configure the root first
llist = cp["loggers"]["keys"]
llist = llist.split(",")
llist = list(map(lambda x: x.strip(), llist))
llist.remove("root")
section = cp["logger_root"]
root = logging.root
log = root

(其中cp是加載你傳入的.ini文件的configparser

我能想到的唯一原因是顯式優於隱式 ,因此它會強制您准確地聲明您想要對根記錄器做什么,以防您認為它會做一些魔術。 雖然我認為這不是一個特別好的理由。 這可能只是某人當時認為這樣做的方式。 如果你進一步閱讀

fileConfig()API比dictConfig()API舊,並且不提供涵蓋日志記錄的某些方面的功能[... N]注意未來的配置功能增強將添加到dictConfig(),因此值得考慮轉換在方便的時候使用這個更新的API。

如果您考慮dictConfig文檔 ,則看起來您不必提供root記錄器。

所以看來你需要指定一個根處理,與除向后兼容性沒有很好的理由。 如果你想解決這個問題,你必須在Python文件中指定你的設置或者導入一個JSON文件並使用dictConfig方法。

萬一發生在其他人身上,請檢查是否有逗號分隔所有記錄器條目,因為您可能缺少一個記錄器條目,並且兩個字段的名稱都已合並。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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