Reputation: 1568
I want two loggers, one for prod and one for dev. I found that it's mandatory to declare a root (because if I delete the root logger, python's raise me an error).
Here is my test.ini file:
[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
And my main.py file:
import logging
from logging.config import fileConfig
fileConfig('test.ini')
loggerDev = logging.getLogger("dev")
loggerDev.warning("Not supposed to also log in root.")
But my console output this:
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.
And I don't want the latest line to be printed. It seems that the loggerDev is a child of the root logger.
How to solve this?
Upvotes: 1
Views: 1116
Reputation: 1568
Solution founded: set propagate
to false.
In .ini file you can do it by adding this line in the [logger_myLogger]
section:
propagate=0
Upvotes: 3