Re: python logging module problem
Peter Otten wrote: > You can achieve the desired behaviour by adding a custom Filter: > > import sys > import logging > > logger = logging.getLogger("my_app") > logger.setLevel(logging.DEBUG) > > class LevelFilter(logging.Filter): > def __init__(self, level): > self.level = level > def filter(self, record): > return self.level == record.levelno > > def make_handler(outstream, format, level): > handler = logging.StreamHandler(outstream) > formatter = logging.Formatter(format) > handler.setFormatter(formatter) > handler.addFilter(LevelFilter(level)) > return handler > > logger.addHandler(make_handler(sys.stderr, > 'STDERR %(levelname)s %(message)s', logging.WARN)) > logger.addHandler(make_handler(sys.stdout, > 'STDOUT %(levelname)s %(message)s', logging.INFO)) > > logger.info("the world is flat") > logger.warning("take care not to fall off its rim") > > Not sure whether this is a good idea. Another way might be to use distinct > loggers. > > Peter Thanks. This looks similar to what I wanted. I'll try customizing it to my requirements and see if this helps. Thanks, Ritesh -- http://mail.python.org/mailman/listinfo/python-list
Re: python logging module problem
Ritesh Raj Sarraf wrote: > Vinay Sajip wrote: >> It's usual to rely on logger levels and to set handler levels for >> additional refinement of what goes to a particular handler's >> destination. > The problem is that for StreamHandler, logging module logs to > sys.stderr. > I want to use the logging feature for most of the messages my program > displays. > > So some messages would be going to sys.stdout and some to sys.stderr. > > So, I'm ended up creating two handlers, one for sys.stdout and the > other for sys.stderr. > I'd then make INFO level messages go to sys.stdout and DEBUG level > messages go to sys.stderr. > > What do you suggest ?? > Is it good doing this way ? You can achieve the desired behaviour by adding a custom Filter: import sys import logging logger = logging.getLogger("my_app") logger.setLevel(logging.DEBUG) class LevelFilter(logging.Filter): def __init__(self, level): self.level = level def filter(self, record): return self.level == record.levelno def make_handler(outstream, format, level): handler = logging.StreamHandler(outstream) formatter = logging.Formatter(format) handler.setFormatter(formatter) handler.addFilter(LevelFilter(level)) return handler logger.addHandler(make_handler(sys.stderr, 'STDERR %(levelname)s %(message)s', logging.WARN)) logger.addHandler(make_handler(sys.stdout, 'STDOUT %(levelname)s %(message)s', logging.INFO)) logger.info("the world is flat") logger.warning("take care not to fall off its rim") Not sure whether this is a good idea. Another way might be to use distinct loggers. Peter -- http://mail.python.org/mailman/listinfo/python-list
Re: python logging module problem
Vinay Sajip wrote: > > It's usual to rely on logger levels and to set handler levels for > additional refinement of what goes to a particular handler's > destination. > The problem is that for StreamHandler, logging module logs to sys.stderr. I want to use the logging feature for most of the messages my program displays. So some messages would be going to sys.stdout and some to sys.stderr. So, I'm ended up creating two handlers, one for sys.stdout and the other for sys.stderr. I'd then make INFO level messages go to sys.stdout and DEBUG level messages go to sys.stderr. What do you suggest ?? Is it good doing this way ? Ritesh -- http://mail.python.org/mailman/listinfo/python-list
Re: python logging module problem
Ritesh Raj Sarraf wrote: > When I execute the above code, logger.info()'s messages don't get > displayed. And logger.warning()'s messages get displayed twice. > The warning messages are displayed twice because you have two handlers which both output to the console. The reason you don't get the info messages is that you haven't set a level on the logger, so the default of WARNING is used. It's usual to rely on logger levels and to set handler levels for additional refinement of what goes to a particular handler's destination. Regards, Vinay Sajip -- http://mail.python.org/mailman/listinfo/python-list
Re: python logging module problem
Ritesh Raj Sarraf wrote: > import os, sys, logging > > logger = logging.getLogger("my_app") > I tried this code: import logging, sys # set up logging to file - see previous section for more details logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', stream=sys.stderr) # define a Handler which writes INFO messages or higher to the sys.stderr console = logging.StreamHandler(sys.stdout) console.setLevel(logging.INFO) # set a format which is simpler for console use formatter = logging.Formatter('%(message)s') # tell the handler to use this format console.setFormatter(formatter) # add the handler to the root logger #logging.getLogger('').addHandler(console) logging.RootLogger(console)#.addHandler(console) # Now, we can log to the root logger, or any other logger. First the root... logging.info('Jackdaws love my big sphinx of quartz.') logging.debug('Ritesh raj Sarraf.\n') With this it seems to be working halfway. logging.debug() works perfect. But logging.info() is inheriting the settings of logging.debug(). For example it is using logging.debug()'s formatter while displaying. :-( Ritesh -- http://mail.python.org/mailman/listinfo/python-list