使用 ini 文件配置禁用 python 的根记录器

Disable python's root logger with ini fileconfig

我想要两个记录器,一个用于生产,一个用于开发。我发现声明根是强制性的(因为如果我删除根记录器,python 会给我一个错误)。

这是我的 test.ini 文件:

[loggers]
keys=root,dev,prod

[handlers]
keys=handlerRoot,handlerDev,handlerProd

[formatters]
keys=formatterRoot,formatterDev,formatterProd

# Root
[logger_root]
level=WARNING
handlers=handlerRoot

[handler_handlerRoot]
class=StreamHandler
level=WARNING
formatter=formatterRoot
args=(sys.stdout,)

[formatter_formatterRoot]
format=
    %(asctime)s - %(levelname)s - ROOOOT - %(message)s
datefmt=%A %d %B %Y at %H:%M:%S

# Prod
[logger_prod]
level=WARNING
handlers=handlerProd
qualname=prod

[handler_handlerProd]
class=StreamHandler
level=WARNING
formatter=formatterProd
args=(sys.stdout,)

[formatter_formatterProd]
format=
    %(asctime)s - %(levelname)s - %(message)s
datefmt=%A %d %B %Y at %H:%M:%S

# Dev
[logger_dev]
level=DEBUG
handlers=handlerDev
qualname=dev

[handler_handlerDev]
class=StreamHandler
level=DEBUG
formatter=formatterDev
args=(sys.stdout,)

[formatter_formatterDev]
format=
    %(asctime)s - %(name)s - %(levelname)s - %(module)s - %(filename)s
    %(message)s
datefmt=%d-%m-%Y %H:%M:%S

还有我的 main.py 文件:

import logging
from logging.config import fileConfig
fileConfig('test.ini')

loggerDev = logging.getLogger("dev")
loggerDev.warning("Not supposed to also log in root.")

但是我的控制台输出这个:

21-04-2020 23:05:41 - dev - WARNING - main - main.py
Not supposed to also log in root.

Tuesday 21 April 2020 at 23:05:41 - WARNING - ROOOOT - Not supposed to also log in root.

而且我不想打印最新的一行。看起来 loggerDev 是根记录器的子项。

如何解决?

已找到解决方案:将 propagate 设置为 false。

在 .ini 文件中,您可以通过在 [logger_myLogger] 部分添加以下行来完成此操作: propagate=0