Using logging module to log either to screen or a file

RedBaron dheeraj.gupta4 at gmail.com
Tue Dec 7 23:52:07 EST 2010


On Dec 7, 7:33 pm, Jean-Michel Pichavant <jeanmic... at sequans.com>
wrote:
> RedBaron wrote:
> > Hi,
> > I am beginner to python and i am writing a program that does a lot of
> > things. One of the requirements is that the program shud generate a
> > log file. I came across python loggging module and found it very
> > useful. But I have a few problems
> > Suppose by giving option '-v' along with the program the user can turn
> > off logging to a file and instead display log on the screen. Since I
> > am using a config file for logging, how do I accomplish this.
> > I tried to define two handlers (fil and screen) and added it to my
> > logger. But that logs data to both screen and the file. I need to log
> > it to only one. How do I dynamically remove one of the handler from
> > the logger based on user option. As a precursor how do i reference the
> > handlers defined in config file in the code??
>
> your logger has a public 'handlers' attribute.
>
> consoleHandlers = [h for h in logger.handlers if h.__class__ is
> logging.StreamHandler] # the list of handlers logging to the console
> (assuming they are instances of the StreamHandler class)
>
> if consoleHandlers:
>     h1 = consoleHandlers[0]
>     h1.filter = lambda x:True # enable the handler
>     h1.filter = lambda x:False # disable the handler
>
> JM

Thanks JM,
This works like charm. I had also though on similar lines bt I was
using isinstance(). I have two handlers - logging.RotatingFIleHandler
and StreamHandler. isinstance() was weird in the sense that no matter
which handle I checked for being 'StreamHandler' I always got true.
Also instead of setting filter to false, I was popping from the
handlers list...Silly me
Thanks a ton



More information about the Python-list mailing list