FAQ
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ÞBUG
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ÞBUG
formatterÞtailed
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?

Search Discussions

  • Peter Otten at Apr 30, 2011 at 5:09 am

    Unknown Moss wrote:

    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.
  • Unknown Moss at Apr 30, 2011 at 8:58 pm

    On Apr 29, 10:09?pm, Peter Otten wrote:
    Unknown Moss wrote:
    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.
    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.
  • Unknown Moss at Apr 30, 2011 at 8:58 pm

    On Apr 29, 10:09?pm, Peter Otten wrote:
    Unknown Moss wrote:
    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.
    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.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppython-list @
categoriespython
postedApr 30, '11 at 12:17a
activeApr 30, '11 at 8:58p
posts4
users2
websitepython.org

2 users in discussion

Unknown Moss: 3 posts Peter Otten: 1 post

People

Translate

site design / logo © 2022 Grokbase