Izaya
Izaya

Reputation: 1568

Disable python's root logger with ini fileconfig

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

Answers (1)

Izaya
Izaya

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

Related Questions