python内置日志模块(logging)使用方法
一、初识logging模块
#!/usr/bin/env python #-*- coding:utf-8 -*- import logging #导入logging内置模块 logging.debug("这是debug等级的message") #告警级别最低,输出详细的运行情况,主要用于调试。
logging.info("这是info等级的message") #告警级别比debug要高,确认一切按预期运行,一般用于输出重要运行情况。 logging.warning("这是warning等级的message") #告警级别比info要高,该模式是默认的告警级别!预示着一些意想不到的事情发生,或在不久的将来出现一些问题(例如“磁盘空间不足”)。该软件仍在正常工作。 logging.error("这是error等级的message") #告警级别要比warning要高,由于一个更严重的问题,该软件还不能执行某些功能。 logging.critical("这是critical等级的message") #告警级别要比error还要高,严重错误,表明程序本身可能无法继续运行。
#显示默认告警级别warning以上级别的信息,代码执行结果如下(loggin中默认的日志收集器为root,收集等级为Warning): WARNING:root:这是warning等级的message ERROR:root:这是error等级的message CRITICAL:root:这是critical等级的message
二、日志收集器
#创建自己的日志收集器对象logging.getLogger
my_logging = logging.getLogger('my_logging')
#设置收集的日志等级,设置debug等级以上的日志
my_logging.setLevel('DEBUG')
#调用
my_logging.debug("这是debug等级的message")
三、日志输出渠道
#有两种输出方式:1.输出到控制台 2.输出到文件
#输出到控制台,创建一个日志输出渠道:
l_s = logging.StreamHandler()
l_s.setLevel('DEBUG') #设置收集日志等级,设置debug等级以上的日志
my_logging.addHandler(l_s) #将输出渠道添加到日志收集器中
#输出到文件,可输出多个文件,创建一个日志输出渠道:
l_f = logging.FileHandler('logging.log',encoding='utf8') #第一个文件
l_f.setLevel('DEBUG') #设置收集日志等级,设置debug等级以上的日志
l_f2 = logging.FileHandler('logging2.log',encoding='utf8') #第二个文件
l_f2.setLevel('WARNING') #设置收集日志等级,设置warning等级以上的日志
my_logging.addHandler(l_f) #将输出渠道添加到日志收集器中
my_logging.addHandler(l_f2)
四、日志输出格式
可以通过logging.Formatter指定日志的输出格式,这个参数可以输出很多有用的信息,如下:
%(name)s #收集器名称
%(levelno)s #打印日志级别的数值
%(levelname)s #打印日志级别名称
%(pathname)s #打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s #打印当前执行程序名
%(funcName)s #打印日志的当前函数
%(lineno)d #打印日志的当前行号
%(asctime)s #打印日志的时间
%(thread)d #打印线程ID
%(threadName)s #打印线程名称
%(process)d #打印进程ID
%(message)s #打印日志信息
在工作中建议使用格式如下:
#打印日志的时间 - 打印当前执行程序名-->打印日志的当前行号 - 打印日志级别名称:打印日志信息
'%(asctime)s - [%(filename)s -->line:%(lineno)d] - %(levelname)s: %(message)s'
#定义handler的log信息输出格式
formatter = logging.Formatter('%(asctime)s - [%(filename)s-->line:%(lineno)d] - %(levelname)s: %(message)s')
#设置handler的log信息输出格式
l_s.setFormatter(formatter)
l_f.setFormatter(formatter)
l_f2.setFormatter(formatter)
推荐博客:https://www.cnblogs.com/yinzhengjie/p/8526226.html
推荐理由:看上去高大上,案例较多!