logging模块知识点及应用小结

Logging模块知识点:

一.分为5个级别:debug(),info(),warning(),error(),critical()。级别由低到高

 1.1最简单的用法:

 

1.2 如果想把日志写到文件里:logging.basicConfig()方法

 

whw.log文件里的内容为:

 

注意后面那句level=’logging.INFO’的意思是把日志的记录级别设置为INFO,也就是说,只有日志是INFO或者比INFO级别高的日志才会被记录到文件里面。如上面的例子中debug的级别低于info所以whw.log日志文件里不会记录logging.debug()方法中的信息。如果希望记录debug的日志,只要将级别设置为DEBUG就可以了。

注意如果不设置日志级别,那么默认的日志级别是warning。

二.自定义日志格式

1.日志中增加时间信息:

 

whw.log文件中的内容为:(运行2次的结果)

 

除了加时间还可以定义一大堆格式,如下表所示:

 

三.日志同时输出到屏幕和文件

1.python使用logging模块记录日志涉及4个主要的类:

(1)logger:提供了应用程序可以直接使用的接口;

(2)handler:将(logger创建的)日志记录发送到合适的目的输出;

(3)filter:提供了细度设备来决定输出那条日志记录;(用的不多)

(4)formatter:决定日志记录的最终输出格式。

例一:同时输出到文件与屏幕(含filter过滤)

import logging

class IgnoreBackupLogFilter(logging.Filter):
    """忽略带db backup 的日志"""
    def filter(self, record): #固定写法
        return   "db backup" not in record.getMessage()
#1.生成logger对象#############################################
whw_logger = logging.getLogger('whw_web')
#设置日志级别(这里是全局的)全局的默认级别为warning
whw_logger.setLevel(logging.DEBUG)
#1.1 把filter对象添加到logger中就可以支持过滤
whw_logger.addFilter(IgnoreBackupLogFilter())
#注意,如果全局设置为DEBUG,console handler设置为INFO,如果输出日志级别为debug,那就不会在日志中打印
#全局先过滤一遍
#2.生成handler对象##############################################
whw_co = logging.StreamHandler()#屏幕~~~
#可以在handler中设置级别:控制屏幕的不同的日志级别与输出
whw_co.setLevel(logging.WARNING)
whw_fh = logging.FileHandler('whw_web.log')#文件~~~
#可以在handler中设置级别:控制文件的不同的日志级别与输出
whw_fh.setLevel(logging.ERROR)
#2.1 把handler对象绑定到logger对象中
whw_logger.addHandler(whw_co)
whw_logger.addHandler(whw_fh)
#3.生成formatter对象############################################
#文件
file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
#屏幕
console_formatter = logging.Formatter('%(asctime)s - %(name)s -%(lineno)s- %(levelname)s - %(message)s')
#3.1 把formatter对象绑定到handler对象中
#屏幕+文件
whw_co.setFormatter(console_formatter)
whw_fh.setFormatter(file_formatter)

#########输出日志#################################################
whw_logger.debug('whwhwhwhwh,db backup')
whw_logger.info('whwhwhwhwh,db backup')
whw_logger.warning('whwhwhwhwh,db backup')
whw_logger.error('whwhwhwhwh') 

例一的输出结果为:

例二:日志的自动截断

import logging
from logging import handlers

whw_logger = logging.getLogger(__name__)

log_file = "whw_log.log"


fh = handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=5,backupCount=3)
#也可:fh = handlers.RotatingFileHandler(filename=log_file,maxBytes=10,backupCount=3)

formatter = logging.Formatter('%(asctime)s %(module)s:%(lineno)d %(message)s')

fh.setFormatter(formatter)

whw_logger.addHandler(fh)

whw_logger.warning('whehejwwj')
whw_logger.warning('kjdswewi')
whw_logger.error('wwhwwl')

例二的运行结果如下:

 

posted on 2018-04-06 15:12  江湖乄夜雨  阅读(241)  评论(0编辑  收藏  举报