转载:https://mp.weixin.qq.com/s/K3k-Mk75tSe-Z8cTooyJTg
https://blog.csdn.net/zywvvd/article/details/87857816
记录日志最简单的方法就是在要记录的地方print,但这种方法打印出来没有时间,也不知道日志记录的位置,没有可读的日记格式,因此需要使用python内置logging模块。
1.logging日志框架
主要包括四部分:
(1)Logger(记录器)
返回具有指定名称的记录器,如果未指定名称,则返回作为层次结构的根记录器
(2)Handler(处理器)
将logger发过来的信息进行准确地分配,送往正确的地方,(如控制台、文件等)
Python内置了很多实用的处理器,常用的有:
1、StreamHandler 标准流处理器,将消息发送到标准输出流、错误流
2、FileHandler 文件处理器,将消息发送到文件
3、RotatingFileHandler 文件处理器,文件达到指定大小后,启用新文件存储日志
4、TimedRotatingFileHandler 文件处理器,日志以特定的时间间隔轮换日志文件
(3)Formatter(格式器)
指定最终某条记录打印的格式布局,并将传递来的数据拼接成一条具体的字符串。
Format中有一些自带的LogRecord属性可以使用,如下表格:
(4)Filter(过滤器)
提供更细粒度的判断,来决定日志是否需要打印。如Filter能够对来自特定源的日志进行拦截或修改甚至修改其日志级别(修改后再进行级别判断)。
2.日志级别
3.常用函数
(1)logging.basicConfig()
对日志系统进行基本配置。如果根记录器已配置处理程序,则此函数不执行任何操作。关键字参数:
filename :日志文件的保存路径。如果配置了些参数,将自动创建一个FileHandler作为Handler;
filemode :日志文件的打开模式。 默认值为’a’,表示日志消息以追加的形式添加到日志文件中。如果设为’w’, 那么每次程序启动的时候都会创建一个新的日志文件;
format :设置日志输出格式;
datefmt :定义日期格式;
level :设置日志的级别.对低于该级别的日志消息将被忽略;
stream :设置特定的流用于初始化StreamHandler;
(2)logging.getLogger()
返回日志对象层次关系中的根记录器。
(3)logging.getLevelName()
获取日志级别对应的名称。
(4)logger.setLevel():
设置日志的级别。对于低于该级别的日志消息将被忽略。
4.基本使用
(1)
import logging logging.basicConfig(level=logging.DEBUG)#修改日志默认级别 logging.debug("this is debug") logging.info("this is info") logging.warning("this is warning") logging.error("this is error") logging.critical("this is critical") '''打印结果 DEBUG:root:this is debug INFO:root:this is info WARNING:root:this is warning ERROR:root:this is error CRITICAL:root:this is critical '''
import logging logging.basicConfig() logging.debug("this is debug") logging.info("this is info") logging.warning("this is warning") logging.error("this is error") logging.critical("this is critical") '''打印结果 WARNING:root:this is warning ERROR:root:this is error CRITICAL:root:this is critical 基本配置默认日志级别为WARGING,低于WARING的日志信息都不会输出 '''
(2)指定日志格式
import logging logging.basicConfig(format='%(asctime)s %(levelname)s %(name)s %(message)s') logging.error("this is error") '''打印结果 2021-12-23 16:44:21,547 ERROR root this is error '''