【问题标题】:Can I have logging.ini file without root logger?我可以在没有根记录器的情况下拥有 logging.ini 文件吗?
【发布时间】:2015-04-28 13:24:44
【问题描述】:

这是我的 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

请帮我解决问题。 要么 请解释一下“为什么总是需要包含根记录器?”

【问题讨论】:

    标签: python logging configuration ini


    【解决方案1】:

    如果您use the source,您会发现您必须配置根记录器:

    # 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

    我能想到的唯一原因是explicit is better than implicit,所以它会强制你准确地声明你想对根记录器做什么,以防你认为它会产生一些魔力。虽然我不认为这是一个特别好的理由。这可能只是当时有人想这样做的方式。如果你做一些further reading:

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

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

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

    【讨论】:

      【解决方案2】:

      以防万一发生在其他人身上,请检查您是否使用逗号分隔所有记录器条目,因为您可能缺少一个,将两个字段的名称合并。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-29
        • 1970-01-01
        • 2017-12-29
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        • 2016-10-06
        • 2015-12-25
        相关资源
        最近更新 更多