Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I change the format of a Python log message on a per-logger basis?

After reading the documentation on logging, I know I can use code like this to perform simple logging:

import logging  def main():     logging.basicConfig(filename="messages.log",                         level=logging.WARNING,                         format='%(filename)s: '                                     '%(levelname)s: '                                 '%(funcName)s(): '                                 '%(lineno)d:\t'                                 '%(message)s')      logging.debug("Only for debug purposes\n")     logging.shutdown()  main() 

However, I realised I don't know how to change the format of log messages on a per-logger basis, since basicConfig is a module-level function. This code works for creating different loggers with different levels, names, etc. but is there a way to change the format of those log messages on a per-logger basis as well, in a way similar to basicConfig?

import inspect import logging  def function_logger(level=logging.DEBUG):     function_name = inspect.stack()[1][3]     logger = logging.getLogger(function_name)     logger.setLevel(level)     logger.addHandler(logging.FileHandler("{0}.log".format(function_name)))     return logger  def f1():     f1_logger = function_logger()     f1_logger.debug("f1 Debug message")     f1_logger.warning("f1 Warning message")     f1_logger.critical("f1 Critical message")  def f2():     f2_logger = function_logger(logging.WARNING)     f2_logger.debug("f2 Debug message")     f2_logger.warning("f2 Warning message")     f2_logger.critical("f2 Critical message")  def main():     f1()     f2()     logging.shutdown()  main() 
like image 595
Ricardo Altamirano Avatar asked Jul 20 '12 14:07

Ricardo Altamirano


People also ask

What is the default logging level in Python?

The default level is WARNING , which means that only events of this level and above will be tracked, unless the logging package is configured to do otherwise. Events that are tracked can be handled in different ways. The simplest way of handling tracked events is to print them to the console.

What are the five levels of logging in Python?

In Python, the built-in logging module can be used to log events. Log messages can have 5 levels - DEBUG, INGO, WARNING, ERROR and CRITICAL. They can also include traceback information for exceptions. Logs can be especially useful in case of errors to help identify their cause.


1 Answers

Try this

import logging  logger = logging.getLogger('simple_example') logger.setLevel(logging.DEBUG) # create file handler that logs debug and higher level messages fh = logging.FileHandler('spam.log') fh.setLevel(logging.DEBUG) # create console handler with a higher log level ch = logging.StreamHandler() ch.setLevel(logging.ERROR) # create formatter and add it to the handlers formatter = logging.Formatter(     '%(asctime)s - %(name)s - %(levelname)s - %(message)s') ch.setFormatter(formatter) fh.setFormatter(formatter) # add the handlers to logger logger.addHandler(ch) logger.addHandler(fh)  # 'application' code logger.debug('debug message') logger.info('info message') logger.warn('warn message') logger.error('error message') logger.critical('critical message') 

See http://docs.python.org/howto/logging-cookbook.html#multiple-handlers-and-formatters for more information

like image 157
Pavel Reznikov Avatar answered Sep 20 '22 04:09

Pavel Reznikov