logger chain in python

logging, python

Solution

I tend to use the logging module in my packages/modules like so:

import logging
log = logging.getLogger(__name__)
log.info("Whatever your info message.")

This sets the name of your logger to the name of the module for inclusion in the log message. You can control where the name is by where `%(name)s` is found in the format string. Similarly you can place the pid with `%(process)d` and the thread id with `%(thread)d`. See the docs for all the options.

Formatting example:

import logging
logging.basicConfig(format="%(asctime)s %(levelname)s %(name)s %(process)d/%(threadName)s: %(message)s")
logging.getLogger('this.is.the.module').warning('Testing for SO')

Gives me:

2010-06-07 08:43:10,494 WARNING this.is.the.module 14980/MainThread: Testing for SO

Problem

I'm writing python package/module and would like the logging messages mention what module/class/function they come from. I.e. if I run this code: ``` import mymodule.utils.worker as worker w = worker.Worker() w.run() ``` I'd like to logging messages looks like this: ``` 2010-06-07 15:15:29 INFO mymodule.utils.worker.Worker.run <pid/threadid>: Hello from worker ``` How can I accomplish this? Thanks.

Original source