通过配置文件将Python日志记录到不同目标

4 投票
1 回答
8471 浏览
提问于 2025-04-17 08:38

我想用一个配置文件来创建两个日志记录器,这两个记录器会分别把日志写入两个不同的文件。我的配置文件是这样的:

[loggers]
keys=root,main,zipper

[handlers]
keys=main,zip

[formatters]
keys=fmt

[logger_root]
level=DEBUG
handlers=main

[logger_main]
level=DEBUG
handlers=main
qualname=MAIN

[logger_zipper]
level=DEBUG
qualname=UPLOAD
handlers=zip

[handler_zip]
class=FileHandler
level=DEBUG
formatter=fmt
args=('zipper.log','a+')

[handler_main]
class=FileHandler
level=DEBUG
formatter=fmt
args=('main.log','a+')

[formatter_fmt]
format=%(asctime)s - %(levelname)s - %(name)s - %(message)s

我尝试这样使用这个配置文件:

import logging
import logging.config

logging.config.fileConfig("logging.conf")

# Logs to the first file
log = logging.getLogger("")
log.debug("unspec - debug")
log.error("unspec - error")

# Logs to the first file
log_r = logging.getLogger("main")
log_r.debug("main - debug")
log_r.error("main - error")

# Also logs to the first file :(
log_z = logging.getLogger("zipper")
log_z.debug("zipper - debug")
log_z.error("zipper - error")

但不知为什么,所有的日志信息都被写到了第一个文件里,而我本来希望最后两个信息能写入'zipper.log'。我漏掉了什么呢?

1 个回答

7

问题在于配置文件中使用的名称:

[logger_zipper]
level=DEBUG
qualname=UPLOAD
handlers=zip

和代码中使用的名称不一致:

log_z = logging.getLogger("zipper")

你可以使用以下任意组合:

  • qualname=zipperlogging.getLogger("zipper")
  • qualname=UPLOADlogging.getLogger("UPLOAD")

撰写回答