python之logging日志模块详解

logging日志介绍:
很多程序都有记录日志的需求,并且日志中包含的信息既有正常的程序访问日志,还可能有错误、警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等,print也可以输入日志,但是logging相对print来说更好控制输出在哪个地方,怎么输出及控制消息级别来过滤掉那些不需要的信息。
日志级别:

  • 1,NOSET 0 等于没写,废话。
  • 2,debug, 10, 调试,一些额外信息,备注,往往和主体功能无关。 日报里面的备注
  • 3,info, 20 主体功能的信息。 日报,做了些啥?
  • 4,warning, 30, 警告, 下次可能要出错了。 交警叔叔警告
  • 5,error, 40, 犯错,违法。抢红灯
  • 6, critical, 50, 极其严重。抢银行
    设置级别:
    当设成 debug 的时候,只有 高于,等于该级别的才会打印。
    当你设成 warning, 只有 warning, error, critical才会打印
    logging日志框架
  • 1, 日志收集器 logger: 日记本
  • 2, 日志收集器级别 level
  • 3, 日志处理器准备 handler, 不同记号的笔
  • 4, 日志处理器级别设置
  • 5, logger.addHandler(hadler),添加到处理器中
  • 6, 设置日志格式 format, 日期:重要程度:分类(工作,生活):内容 fmt = logging.Format()
  • 7, 添加日志处理器, handler.setFormat(fmt)
    代码示例如下:
import logging

# 初始化 logger 收集器,给收集器起名为python25 ,默认是root
logger = logging.getLogger('python25')

# 设置级别

logger.setLevel('DEBUG')

# 笔的默认级别是warning, 默认是使用控制台输出。
# 放到一个file 文件当中
handler =  logging.FileHandler('log.txt')
# 控制台
console_handler = logging.StreamHandler()

# 给控制台设置级别
console_handler.setLevel('DEBUG')

# 日志处理器设置级别
handler.setLevel('WARNING')


# 添加 handler
logger.addHandler(handler)
logger.addHandler(console_handler)

# 为handler 设置格式
fmt  =  logging.Formatter('%(filename)s-%(lineno)d - %(name)s-%(levelname)s-%(message)s')
handler.setFormatter(fmt)

logger.debug('111')
logger.info('hello')
logger.warning('world')
logger.error('ceshi123')
logger.critical('bengkuile23425252')

从代码中可以看出控制台console_handler设置的级别为:debug
控制台输出结果
在这里插入图片描述
输入到log.txt的handler的级别为warning
所以:log.txt为:
在这里插入图片描述
封装logging,logging封装成类
用的时候直接调用 LoggerHandler类的方法即可

import logging


class LoggerHandler(logging.Logger):
    def __init__(self, name='root', level='DEBUG', file=None, format='%(filename)s:%(lineno)d:%(name)s:%(levelname)s-%(message)s'):
        super().__init__(name)

        #设置级别
        self.setLevel(level)

        fmt = logging.Formatter(format)

        #初始化处理器
        if file:
            file_handler = logging.FileHandler(file)
            file_handler.setLevel(level)
            file_handler.setFormatter(fmt)
            self.addHandler(file_handler)
        stream_handler = logging.StreamHandler()

        #设置handler的级别
        stream_handler.setLevel(level)
        stream_handler.setFormatter(fmt)
        self.addHandler(stream_handler)
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页