我可以在没有root logger的情况下使用logging.ini文件吗?

Tej*_*jas 7 python configuration logging ini

以下是我的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
Run Code Online (Sandbox Code Playgroud)

我收到了以下错误:

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
Run Code Online (Sandbox Code Playgroud)

请帮我解决问题.或者请解释一下"为什么总是需要包含root logger?"

Way*_*ner 4

如果您使用源,您将看到必须配置根记录器:

\n\n
# configure the root first\nllist = cp["loggers"]["keys"]\nllist = llist.split(",")\nllist = list(map(lambda x: x.strip(), llist))\nllist.remove("root")\nsection = cp["logger_root"]\nroot = logging.root\nlog = root\n
Run Code Online (Sandbox Code Playgroud)\n\n

(加载您传入的文件的cp位置在哪里)configparser.ini

\n\n

我能想到的唯一原因是,显式优于隐式,因此它迫使您准确声明您想要对根记录器执行的操作,以防您认为它会发挥一些作用。虽然我不认为这是一个特别好的理由。这可能只是当时某人的想法。如果您进一步阅读

\n\n
\n

fileConfig() API 比 dictConfig() API 更旧,并且不提供涵盖日志记录某些方面的功能 [... N]请注意,未来对配置功能的增强将添加到 dictConfig() 中,因此它\xe2\当 x80\x99 方便时,值得考虑转换到这个较新的 API。

\n
\n\n

如果您考虑dictConfig文档,您似乎不必提供root记录器。

\n\n

因此,您似乎需要指定一个根处理程序,除了向后兼容性之外没有真正好的理由。如果您想解决这个问题,则必须在 Python 文件中指定设置或导入 JSON 文件并使用该dictConfig方法。

\n