(beginner) logging config not working

U

Unknown Moss

Hi

This is a beginner question. Thanks for the hand.

I've been asked to maintain some poorly constructed python code.
Logging is weak. Getting it to work with python logging
programmatically was easy.

However, I'd like to refactor all the logging code into configuration
since I see the need for other handlers in the future (syslog and
possibly email).

For now I just want to get console and log file working, but I'm
having problems with the log file. I'm trying some test code. Here's
my test script (logging_example.py):

import logging
import logging.config

def main():
logging.config.fileConfig("logging.conf")
logging.debug("debug check")
logging.info("info check")
logging.warn("warn check")
logging.error("err check")
logging.critical("crit check")

if __name__ == "__main__":
main()

Here's my config (logging.conf):

[loggers]
keys=root,file

[handlers]
keys=console,file

[formatters]
keys=simple,detailed

[logger_root]
level=NOTSET
handlers=console

[logger_file]
level=DEBUG
handlers=file
qualname=mylogger

[formatter_simple]
class=logging.Formatter
format=%(asctime)s - %(name)s [%(levelname)s] - %(message)s

[formatter_detailed]
class=logging.Formatter
format=%(asctime)s - %(name)s [%(levelname)s] - %(message)s

[handler_console]
class=logging.StreamHandler
formatter=simple
args=(sys.stdout,)

[handler_file]
class=FileHandler
level=DEBUG
formatter=detailed
args=('logging_example.log', 'w')


Output:

$ python logging_example.py
2011-04-29 17:07:01,923 - root [DEBUG] - debug check
2011-04-29 17:07:01,986 - root [INFO] - info check
2011-04-29 17:07:01,986 - root [WARNING] - warn check
2011-04-29 17:07:01,986 - root [ERROR] - err check
2011-04-29 17:07:02,000 - root [CRITICAL] - crit check

The logging_example.log is created, but no entries are written to it.
Based on this configuration I'd expect all the logging entries to be
written to the file as well.

Any ideas where I'm going awry?
 
P

Peter Otten

Unknown said:
Hi

This is a beginner question. Thanks for the hand.

I've been asked to maintain some poorly constructed python code.
Logging is weak. Getting it to work with python logging
programmatically was easy.

However, I'd like to refactor all the logging code into configuration
since I see the need for other handlers in the future (syslog and
possibly email).

For now I just want to get console and log file working, but I'm
having problems with the log file. I'm trying some test code. Here's
my test script (logging_example.py):

import logging
import logging.config

def main():
logging.config.fileConfig("logging.conf")
logging.debug("debug check")

The above is a shortcut for

root = logging.getLogger("")
root.debug("debug check")

i. e. you are logging to the root logger. According to your config file
messages sent to the root logger are only handled by the console handler:
[logger_root]
level=NOTSET
handlers=console

You can either change that by adding the file handler to the list of
handlers for the root logger

handlers=console,file

in the config file or by directing your logging messages to "mylogger" with

mylogger = logging.getLogger("mylogger")
mylogger.debug("debug check")

Note that loggers are organized in a tree; messages sent to mylogger will be
propagated upwords to the root logger by default.
 
U

Unknown Moss

Unknown said:
This is a beginner question. Thanks for the hand.
I've been asked to maintain some poorly constructed python code.
Logging is weak. Getting it to work with python logging
programmatically was easy.
However, I'd like to refactor all the logging code into configuration
since I see the need for other handlers in the future (syslog and
possibly email).
For now I just want to get console and log file working, but I'm
having problems with the log file. I'm trying some test code. Here's
my test script (logging_example.py):
import logging
import logging.config
def main():
    logging.config.fileConfig("logging.conf")
    logging.debug("debug check")

The above is a shortcut for

root = logging.getLogger("")
root.debug("debug check")

i. e. you are logging to the root logger. According to your config file
messages sent to the root logger are only handled by the console handler:
[logger_root]
level=NOTSET
handlers=console

You can either change that by adding the file handler to the list of
handlers for the root logger

handlers=console,file

in the config file or by directing your logging messages to "mylogger" with

mylogger = logging.getLogger("mylogger")
mylogger.debug("debug check")

Note that loggers are organized in a tree; messages sent to mylogger willbe
propagated upwords to the root logger by default.

Thanks you Peter. That worked perfectly. It points out that I'm not
really understanding the python logging concepts yet. I'll search for
more details. I need pictures. :)

Thanks again.
 
U

Unknown Moss

Unknown said:
This is a beginner question. Thanks for the hand.
I've been asked to maintain some poorly constructed python code.
Logging is weak. Getting it to work with python logging
programmatically was easy.
However, I'd like to refactor all the logging code into configuration
since I see the need for other handlers in the future (syslog and
possibly email).
For now I just want to get console and log file working, but I'm
having problems with the log file. I'm trying some test code. Here's
my test script (logging_example.py):
import logging
import logging.config
def main():
    logging.config.fileConfig("logging.conf")
    logging.debug("debug check")

The above is a shortcut for

root = logging.getLogger("")
root.debug("debug check")

i. e. you are logging to the root logger. According to your config file
messages sent to the root logger are only handled by the console handler:
[logger_root]
level=NOTSET
handlers=console

You can either change that by adding the file handler to the list of
handlers for the root logger

handlers=console,file

in the config file or by directing your logging messages to "mylogger" with

mylogger = logging.getLogger("mylogger")
mylogger.debug("debug check")

Note that loggers are organized in a tree; messages sent to mylogger willbe
propagated upwords to the root logger by default.

Thanks you Peter. That worked perfectly. It points out that I'm not
really understanding the python logging concepts yet. I'll search for
more details. I need pictures. :)

Thanks again.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top