Logging in Python

aha aquil.abdullah at gmail.com
Tue Feb 10 16:38:19 EST 2009


Thanks for your suggestions.  I've also figured that I can test if
logging.RootLogger.manager.loggerDict has any items in it.  Or if it
has a logger for the module that I wish to start.  I like basicLogger
idea though as it seems like the cleanest implementation.

On Feb 10, 3:21 pm, Vinay Sajip <vinay_sa... at yahoo.co.uk> wrote:
> On Feb 10, 5:50 pm, aha <aquil.abdul... at gmail.com> wrote:
>
>
>
> > Hello All,
>
> > I have an application whereloggingmay need to be configured in
> > multiple places.  I've used the PythonLoggingFramework for sometime,
> > but I'm still not sure how to test iflogginghas configured.  For
> > example, I have modules A, B, and C.
>
> > Below is some pseudo code...
> > moduleA
>
> > class A(object):
> >   def __init__(self):
> >     ...
>
> > startLogging(config):
> >   # Configurelogging
> >   # global logger
> >   ...
>
> > moduleB
> > import moduleA
> > from myconfig import MyConfig
> > class B(object):
> >   def __init__(self):
> >     # self.config = MyConfig()
> >     # iflogginghas started [HOW DO YOU DO THIS?]
> >     #   self.logger =logging.getLogger("moduleB")
> >     # else
> >     #   self.logger = moduleA.startLogging(self.config)
> >     # moduleA.startLogging
> >     ...
>
> > Where I need help is determining if a logger has already been
> > configured.  Any advice?
>
> > Aquil
>
> It depends upon how complicated your logging requirements are. For
> example, each module can have the following code in it:
>
> import logging
>
> logging.basicConfig(level=logging.DEBUG, filename="/tmp/myapp.log",
> filemode="w") # An example
>
> logger = logging.getLogger(__name__)
>
> ... your code, involving logger.debug(...) statements
>
> basicConfig() attaches a FileLogger to the root logger, so all logging
> output would be routed to the file "/tmp/myapp.log" in the example.
> However, basicConfig() does nothing if the root logger already has
> handlers, so calling it in each module shouldn't cause problems. It's
> also nice to use the module name (__name__) as the logger name.
>
> Another pattern is to configure logging in your main module, if there
> is one, and then the other modules just assume logging is configured
> and log away. If there isn't a main module, have all the modules
> import a common module which, when imported, configures logging how
> you want it. Under normal circumstances, the import code will only run
> once, so your logging only gets configured the first time the module
> gets imported by any of the others.
>
> Regards,
>
> Vinay Sajip




More information about the Python-list mailing list