Mailing List Archive

Question about logging.config.dictConfig
Hello,

I am trying to configure my loggers using dictConfig, but they do not
print anything. Here are more details.

I have several python scripts that use a similar logging setup. I put
the common configuration in a separate module myloggingconf.py:

# myloggingconf.py
import logging

def configure_logging():
default = logging.Formatter('%(asctime)s %(levelname)-7s %(name)s
%(funcName)s %(message)s')

consoleHandler = logging.StreamHandler()
consoleHandler.setFormatter(default)

rootLogger = logging.getLogger()
rootLogger.addHandler(consoleHandler)
rootLogger.setLevel(logging.INFO)

Then I use it in the other scripts as:

# uselog.py
import logging
import os

from myloggingconf import configure_logging

logger = logging.getLogger(os.path.basename(__file__))

def dosmth():
logger.debug("debug")
logger.info("info")
logger.warning("warning")
logger.error("error")

def main():
configure_logging()
dosmth()

if __name__ == '__main__':
main()

This works correctly and the log messages about INFO print out. Now I
want to try dictConfig. I changed myloggingconf.configure_logging to:

# myloggingconf.py
import logging.config

def configure_logging():
config = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'default': {
'fmt': '%(asctime)s %(levelname)-7s %(name)s
%(funcName)s %(message)s'
}
},
'handlers': {
'stdout': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'default',
}
},
'loggers': {
'': {
'handlers': ['stdout'],
'level': 'DEBUG'
}
}
}
logging.config.dictConfig(config)

When I run uselog.py it prints nothing. I am wondering what is wrong
with the second configuration. I will appreciate any help.

Regards
rambius

--
Tangra Mega Rock: http://www.radiotangra.com
--
https://mail.python.org/mailman/listinfo/python-list
Re: Question about logging.config.dictConfig [ In reply to ]
On 2023-02-07 17:58:26 -0500, Ivan "Rambius" Ivanov wrote:
> I am trying to configure my loggers using dictConfig, but they do not
> print anything. Here are more details.
[...]
> from myloggingconf import configure_logging
>
> logger = logging.getLogger(os.path.basename(__file__))
[...]
>
> def main():
> configure_logging()
> dosmth()
[...]
> def configure_logging():
> config = {
> 'version': 1,
> 'disable_existing_loggers': True,

'disable_existing_loggers': False,

I think I just found out why I've been cargo-culting this line since my
early Django days ;-)-

If you call getLogger very early (as you do), you don't want it disabled
by a later call to dictConfig().


> 'formatters': {
> 'default': {
> 'fmt': '%(asctime)s %(levelname)-7s %(name)s %(funcName)s %(message)s'
'format'
> }
> },
[...]
> }
> logging.config.dictConfig(config)
>
> When I run uselog.py it prints nothing. I am wondering what is wrong
> with the second configuration.

See above.

hp

--
_ | Peter J. Holzer | Story must make more sense than reality.
|_|_) | |
| | | hjp@hjp.at | -- Charles Stross, "Creative writing
__/ | http://www.hjp.at/ | challenge!"
Re: Question about logging.config.dictConfig [ In reply to ]
On Tue, Feb 7, 2023 at 7:35 PM Peter J. Holzer <hjp-python@hjp.at> wrote:
>
> On 2023-02-07 17:58:26 -0500, Ivan "Rambius" Ivanov wrote:
> > I am trying to configure my loggers using dictConfig, but they do not
> > print anything. Here are more details.
> [...]
> > from myloggingconf import configure_logging
> >
> > logger = logging.getLogger(os.path.basename(__file__))
> [...]
> >
> > def main():
> > configure_logging()
> > dosmth()
> [...]
> > def configure_logging():
> > config = {
> > 'version': 1,
> > 'disable_existing_loggers': True,
>
> 'disable_existing_loggers': False,

Thank you! That helped a lot!

Regards
rambius

>
> I think I just found out why I've been cargo-culting this line since my
> early Django days ;-)-
>
> If you call getLogger very early (as you do), you don't want it disabled
> by a later call to dictConfig().
>
>
> > 'formatters': {
> > 'default': {
> > 'fmt': '%(asctime)s %(levelname)-7s %(name)s %(funcName)s %(message)s'
> 'format'
> > }
> > },
> [...]
> > }
> > logging.config.dictConfig(config)
> >
> > When I run uselog.py it prints nothing. I am wondering what is wrong
> > with the second configuration.
>
> See above.
>
> hp
>
> --
> _ | Peter J. Holzer | Story must make more sense than reality.
> |_|_) | |
> | | | hjp@hjp.at | -- Charles Stross, "Creative writing
> __/ | http://www.hjp.at/ | challenge!"
> --
> https://mail.python.org/mailman/listinfo/python-list



--
Tangra Mega Rock: http://www.radiotangra.com
--
https://mail.python.org/mailman/listinfo/python-list