在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文件中编写的格式化程序对象,问题就可以解决了。或者还有其他方法吗?