请稍侯

Python logging

15 May 2015

Python日志记录logigng模块

简单使用,代码如下:

# 导入日志模块
import logging

# 初始化一个logger
logger = logging.getLogger(__name__)
# 设置日志级别
logger.setLevel(logging.DEBUG)
# 初始化一个Handler
fh = logging.StreamHandler()
# 准备格式串
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 把格式化串加入设置到Handle中
fh.setFormatter(formatter)
# 设置日志Handle
logger.addHandler(fh)
# 打印
logger.info('the loggint print')

给日志设置LoggerAdapter

在LoggerAdapter代码如下

class LoggerAdapter(object):

    def __init__(self, logger, extra):
        self.logger = logger
        self.extra = extra

    def process(self, msg, kwargs):
        kwargs["extra"] = self.extra
        return msg, kwargs

    def debug(self, msg, *args, **kwargs):
        """
        Delegate a debug call to the underlying logger, after adding
        contextual information from this adapter instance.
        """
        msg, kwargs = self.process(msg, kwargs)
        self.logger.debug(msg, *args, **kwargs)

所以LoggerAdapter可以这样使用

class CustomAdapter(logging.LoggerAdapter):
    """
    This example adapter expects the passed in dict-like object to have a
    'connid' key, whose value in brackets is prepended to the log message.
    """
    def process(self, msg, kwargs):
        return '[%s] %s' % (self.extra['connid'], msg), kwargs

some_conn_id = 'test-adapter'
logger = logging.getLogger(__name__)
adapter = CustomAdapter(logger, {'connid': some_conn_id})
adapter.info('this is print by adapter')

打印结果为:

2015-05-15 22:40:37,755 - __main__ - INFO - [test-adapter] this is print by adapter