ChuannBlog

4.12 logging

logging模块主要用于调试程序,输出事件日志。 用户指定的message,从上到下,重要性逐渐增加,默认输出warning及以上的

import logging

logging.basicConfig(
    level=logging.INFO,
    format='%(name)s %(asctime)s -- %(message)s',
    datefmt='%d/%m/%y %H:%M:%S',
    filename='logging_info'
)

logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('警告警告')

Logger

Logger不会直接实例化,而是通过logging.getLogger(name)实例化
对同一名称的getLogger()进行多次调用将只会返回同一个Logger对象

Formatter(fmt=None,datefmt=None,style=’%’)

fmt指定日志的输出项目
datefmt指定日志输出时间的格式
style指定格式符(’%’,’{‘, ‘$’)

Handler

处理器,分为三个:StreamHandler(屏幕输出流)和FileHandler(文件输出流)以及NullHandler(供开发者使用的)

FileHandler(filename, mode=’a’, encoding=None, delay=False)

指定日志文件输出流
filename为日志文件名,默认日志文件写入为追加,需要指定编码

def my_logger(filename, file=True, stream=True):
    _logger = logging.getLogger()
    formatter = logging.Formatter(fmt='%(name)s %(asctime)s [%(lineno)d] --  %(message)s',
                                  datefmt='%d/%m/%y %H:%M:%S')
    if file:
        file_handler = logging.FileHandler(filename, encoding='utf-8')
        file_handler.setFormatter(formatter)  # 文件流 文件操作符
        _logger.addHandler(file_handler)
    if stream:
        stream_handler = logging.StreamHandler()
        stream_handler.setFormatter(formatter)  # 屏幕流 屏幕操作符
        _logger.addHandler(stream_handler)
    return _logger


logger = my_logger('logging', file=False)
logger.warning("出错了")