Here is the situation: I wrote my own log handler class (derived from logging.Handler) and I want to be able to use it from a logging config file, that is, a config file loaded with the logging.config.fileConfig() function.
Let say my logging class is called "MyLogHandler" and it's in a module called "mylogmodule", I want to be able to make an entry something like this in my logging config file: [handler_hand02] class=mylogmodule.MyLogHandler level=DEBUG formatter=form02 args=('python.log', 10, True) I did some digging in the code and documentation, and it doesn't appear that this question of writing and accessing your own log handlers is addressed. As per the logging/config.py code, it looks like the actual file handler classes are being grabbed using an "eval" from the "logging" module's namespace, like so: klass = eval(klass, vars(logging)) So this basically means that I have to mess with the "logging" module's namespace if I want this to work, right? So I've come up with a couple of options, but I'm trying to figure out what approach is best: Option 1: Require the client (the user of my logging module), first import my module and then copy it into the logging module's namespace, before calling fileConfig(). Something like this: import mylogmodule import logging logging.mylogmodule = mylogmodule Option 2: Have my module make a copy MyLogHandler class into the logging (or logging.handlers) module, and then let the client use it from their directly. They client would still have to load my logging class first (which isn't any different they what they would have to do if they wanted to use the extended log handlers form the logging.handlers module) My module would include: import logging class MyLogHandler(logging.Handler): ... logging.MyLogHandler = MyLogHandler The config file would simply have: class=MyLogHandler Option 3: Is there an easy (and non-evil) way for me to make my module available as "logging.mylogmodule" directly? I am using setuptools, and it seems like what I've read about "namespaces", they do something close to what I'm looking for, but I think that requires that all of the "__init__.py"s involved be empty (or have some special namespace declaration code). The __init__.py for the logging module is not at all empty, so I suppose that rules out this option? Anyone have some insights on this? Thanks in advance, - Lowell Alleman -- http://mail.python.org/mailman/listinfo/python-list