在python中使用带yaml的日志记录模块时更改格式化程序

时间:2017-11-17 08:55:18

标签: python logging

在python中使用日志记录模块时,我们可以使用yaml文件初始化每个记录器的常规设置。我的测试代码看起来像

[main.py]

import yaml
import logging, logging.config
def setup_logging(default_level=logging.DEBUG):
    with open("./logging.yaml", 'rt') as f:
        configdata = yaml.safe_load(f.read())
    logging.config.dictConfig(configdata)
setup_logging()

dbg = logging.getLogger(__name__)
dbg.info("Test")

[logging.yaml]

version: 1
disable_existing_loggers: False
formatters:
    detail:
        format: "%(asctime)s - %(name)s - %(message)s"
    onlymessage:
        format: "%(message)s"

handlers:
    file_handler:
        class: logging.FileHandler
        level: DEBUG 
        formatter: detail
        filename: ./log
        mode: w

loggers:
    __main__:
        level: DEBUG
        handlers: [file_handler]
        propagate: No

因此对于“file_handler”,默认格式化程序是“detail”。那么如何将此记录器的格式化程序更改为另一个,在本例中为“onlymessage”?

我知道如果给我们格式化对象,我们可以使用Handler.setFormatter()来更改记录器的格式化程序,例如

dbg.handlers[0].setFormatter(FORMATTER NAME)

但是因为我在yaml文件中指定了格式化程序的所有信息,并在初始化logger时使用了logging.config,所以我没有格式化程序对象。我想如果我能检索在yaml文件中编写的格式化程序对象,问题就可以解决了。或者还有其他方法吗?

1 个答案:

答案 0 :(得分:0)

是的,"未使用"如果您不将格式化程序绑定到任何处理程序,格式化程序将在此过程中丢失。 你可以查看发生了什么的来源,here是有趣的。