参考了《Python3从入门到实战》及以下博客
https://www.cnblogs.com//yyds/p/690184.html
https://www.cnblogs.com/yyds/p/6901864.html
https://www.cnblogs.com/goodhacker/p/3355660.html
https://cuiqingcai.com/6080.html
Python的日志模块
- 参考了《Python3从入门到实战》及以下博客
- 一、日志基本介绍
- 为了监控一些可能发生了的事情(比如错误等)有一个日志最好不过了,这样你就可以清楚地看到发生了什么事情。
- @logging是一种可以用于调试程序的方法,通过在程序不同的代码行添加logging语句,可以将程序的信息记录到文件中,而不是直接输出到控制台中,通过分析这个日志文件,可以检查程序的运行情况,查看程序是否出现了错误,日志文件可以记录大量日志信息,logging不会抛出错误。
- @对root logger进行一次性配置
- 通常,首先用basicConfig配置记录的级别:如logging.DEBUG ,表示DEBUG以上级别的信息才会被记录到日志里。
- @使用同一个函数
- 二、logging模块的处理流程:
-
一、日志基本介绍
为了监控一些可能发生了的事情(比如错误等)有一个日志最好不过了,这样你就可以清楚地看到发生了什么事情。
@logging是一种可以用于调试程序的方法,通过在程序不同的代码行添加logging语句,可以将程序的信息记录到文件中,而不是直接输出到控制台中,通过分析这个日志文件,可以检查程序的运行情况,查看程序是否出现了错误,日志文件可以记录大量日志信息,logging不会抛出错误。
'''
CRITICAL(关键)——非常严重的错误
ERROR(错误)——不太严重的错误
WARNING(警告)——警告
INFO(信息)——一些信息
DEBUG(调试)——调试信息
'''
logging.debug(msg,*args,**kwargs)
logging.info(msg,*args,**kwargs)
logging.warning(msg,*args,**kwargs)
logging.error(msg,*args,**kwargs)
logging.critical(msg,*args,**kwargs)
logging.log(level,*args,**kwargs)
@对root logger进行一次性配置
logging.basicConfig(**kwargs)
通常,首先用basicConfig配置记录的级别:如logging.DEBUG ,表示DEBUG以上级别的信息才会被记录到日志里。
import logging
logging.basicConfig(filename='you.log',level=logging.ERROR)
logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("critical")
@使用同一个函数
import logging
logging.basicConfig(filename='you.log',level=logging.ERROR)
logging.log(logging.DEBUG,"dubug")
logging.log(logging.INFO,"info")
logging.log(logging.WARNING,"warning")
logging.log(logging.ERROR,"error")
logging.log(logging.CRITICAL,"critical")
二、logging模块的处理流程:
四大组件:
日志器(Logger):产生日志的一个接口
(Handler):把产生的日志发送到响应的目的地
( Filter):更精细地控制那些日志的输出
(Formatter):对输出信息进行格式化
(1):Logger:产生一个日志
--Logger.setLevel()设置日志器会处理的日志消息的最低严重级别
--Logger.addHandler()和Logger.removeHandler 为该logger对象添加一个处理器和移除一个处理器
--Logger.addFilter()和Logger.removeFilter()为该logger对象添加一个过滤器和删除一个过滤器
--Logger.debug()产生一条debug级别的日志,info,error等同理。
--Logger.exception()创建类似于Logger.error的日志消息
--Logger.log()创建一个日志记录,要填入参数的。
如何获得一个logger对象
--实例化
--logging.getLogger()
(2)Handler:
--把log发送到指定位置
--方法:setLevel,setFormat,addFilter,removeFilter
--不需要直接使用,Handler是基类
--logging.StreamHandler:将日志消息发送输出到Stream 如std.out std.err或任何file-like对象
--logging.FileHandler 将日志消息发送到磁盘文件 默认情况下文件大小会无限增长
--logging.handlers.RotatingFileHandler 将日志消息发送到磁盘文件,并支持日志文件按大小切割
--logging.handlers.TimeRotatingFileHandler 将日志文件发送到磁盘文件,并支持日志文件按时间切割
--logging.handlers.HTTPHandler 将日志文件以GET或POST的方式发送给一个HTTP服务器
--logging.handlers.SMTPHandler 将日志消息发送给一个指定的email地址。
--logging.NullHandler 该Handler实例会忽略error messages。
(3)Format类
--直接实例化
--可以继承Format添加特殊内容
--三个参数
--fmt 指定消息格式化字符串,如果不指定该参数则默认使用message的原始值
--datefmt 指定日期格式字符串,如果不指定该参数则默认使用“%Y-%m-%d %H:%M:%S”
--style 可取值为 % { $ 如果不指定该参数默认使用%
(4)Filter类
--可以被Handler和Logger使用
--控制传递过来的信息的具体内容
看个例子
import logging
import logging.handlers
import datetime
logger = logging.getLogger("logger1")
logger.setLevel(logging.DEBUG)
hander1 = logging.FileHandler('you.log')
hander1.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))
hander2 = logging.FileHandler('my.log')
hander2.setLevel(logging.ERROR)
hander2.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s - %(message)s"))
logger.addHandler(hander1)
logger.addHandler(hander2)
logger.debug("debug")
logger.info("info")
logger.warning("warning")
logger.error("error")
logger.critical("critical")