使用 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
我想要两个记录器,一个用于生产,一个用于开发。我发现声明根是强制性的(因为如果我删除根记录器,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