Logging

Intro to logging

Good logging Practice

Logging Hierarchy

Logging Levels

Custom Logging

Logging Levels

The numeric values of logging levels are given in the following table. These are primarily of interest if you want to define your own levels, and need them to have specific values relative to the predefined levels. If you define a level with the same numeric value, it overwrites the predefined value; the predefined name is lost.

Level Numeric value

CRITICAL 50

ERROR 40

WARNING 30

INFO 20

DEBUG 10

NOTSET 0

Custom Logging

Logger.log(level, msg) method.

import logging

TRACE = 5

logging.addLevelName(TRACE, 'TRACE')

FORMAT = '%(levelname)s:%(name)s:%(lineno)d:%(message)s'

logging.basicConfig(format=FORMAT)

l = logging.getLogger()

l.setLevel(TRACE)

l.log(TRACE, 'trace message')

l.setLevel(logging.DEBUG)

l.log(TRACE, 'disabled trace message')

loggingconfig.py

logging.basicConfig(filename = 'myfile.log', level=logging.DEBUG, format='%(filename)s:%(lineno)s %(levelname)s:%(message)s')

foo.py

log = logging.getLogger(__name__) logex = logging.getLogger(__name__ + '.ex')

logger = logging.getLogger("mylog") formatter = logging.Formatter('%(asctime)s | %(name)s | %(levelname)s: %(message)s') logger.setLevel(logging.DEBUG) stream_handler = logging.StreamHandler() stream_handler.setLevel(logging.INFO) stream_handler.setFormatter(formatter) logFilePath = "my.log" file_handler = logging.handlers.TimedRotatingFileHandler(filename = logFilePath, when = 'midnight', backupCount = 30) file_handler.setFormatter(formatter) file_handler.setLevel(logging.DEBUG) logger.addHandler(file_handler) logger.addHandler(stream_handler) logger.info("Started");