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()
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.
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With