python logging module and custom handler specified in config file

Vinay Sajip vinay_sajip at yahoo.co.uk
Thu Oct 18 13:26:59 EDT 2007


On 15 Oct, 15:15, Frank Aune <Frank.A... at broadpark.no> wrote:
> What I'm wondering, is if its possible to specify the database handler in a
> config file like:
>
> [handler_database]
> class=DBHandler
> level=DEBUG
> formatter=database
> args=('localhost', uid='root')
>
> I've seen the log_test14.py example bundled withloggingmodule, which
> describes the DBHandler class and I can get it working if I attach this
> handler to the root logger inside my application, but I would really like to
> do it through a config file like above. But since thelogging.handlers module
> does not know about the DBHandler class, obviously this does not work.
>
> I was thinking perhaps specifying module and classname in the class= option
> above, like class=dbhandler.DBHandler, but it will just complain that
> name 'dbhandler' is not defined.
>
> Is this possible to archieve somehow?
>

The values in the config file are interpreted in the context of the
logging module's namespace. Hence, one way of achieving what you want
is putting any custom handlers in
a module of your own, and providing a binding in the logging module's
namespace. For example: assuming your DBHandler is defined in a module
customhandlers, you could do this somewhere in your code, before
loading the configuration:

import logging
import customhandlers # Use your own module name here

logging.custhandlers = customhandlers # Bind your module to
"custhandlers" in logging

and then your logging configuration can refer to
"custhandlers.DBHandler". Of course I merely used "custhandlers" and
"customhandlers" to show how you can bind to an arbitrary name.

The same technique applies to the arguments passed to the constructor.

Hope this helps,

Vinay Sajip





More information about the Python-list mailing list