![](/img/trans.png)
[英]How do I switch to a Python log formatter I have defined in my logging.ini file?
[英]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.