自定义logger,除了默认logger可显示类型的信息外,根据需要添加logger显示其他字段信息
#!/usr/bin/env python
#-*- coding: utf-8 -*-
##############################################################################
# 自定义logger,除了默认logger可显示类型的信息外,根据需要添加logger显示其他字段信息
##############################################################################
import logging
_NAME = None
_ID = None
class CustomLogRecord(logging.LogRecord):
def __init__(self, *args, **kwargs):
super(CustomLogRecord, self).__init__(*args, **kwargs)
self.custom_name = _NAME
self.custom_id = _ID
class CustomLogger(logging.Logger):
def makeRecord(self, name, level, fn, lno,
msg, args, exc_info, func=None, extra=None):
return CustomLogRecord(name, level, fn, lno,
msg, args, exc_info, func=func)
def get_custom_logger(filename, custom_name='???', custom_id='???'):
global _NAME, _ID
_NAME = custom_name
_ID = custom_id
logging.setLoggerClass(CustomLogger)
logger = logging.getLogger(filename)
logger.setLevel(logging.DEBUG)
return logger
LOG_FORMAT = '[%(asctime)s <%(custom_name)s,%(custom_id)s>] %(levelname)s: %(message)s' # noqa
DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
formater = logging.Formatter(LOG_FORMAT, DATE_FORMAT)
logger = get_custom_logger(__name__, custom_name='name', custom_id='id')
streamHandler = logging.StreamHandler()
streamHandler.setFormatter(formater)
logger.addHandler(streamHandler)
fileHandler = logging.FileHandler('log.txt', 'a+')
fileHandler.setFormatter(formater)
logger.addHandler(fileHandler)
logger.info('custom logger test')