Python标准库中的logging模块提供了日志相关的功能。导入logging模块后,使用debug、info、warning、error和critical等函数记录日志。
默认情况下,logging模块将日志输出到屏幕终端,日志记录级别为warning,只有比warning高的日志才会被打印显示出来。级别排序:CRITICAL > ERROR > WARNING > INFO > DEBUG 。
1、先来简单测试一下logging模块基本功能。


2、配置日志格式并输出到文件中
通过basicConfig方法对日志进行了简单配置,执行程序会在当前目录下生成一个app1.log文件,该文件记录INFO以上级别的日志记录。


3、配置稍详细日志格式
format='%(asctime)s : %(levelname)s : %(message)s' ,格式包含打印日志的时间、日志的级别以及日志的信息。


format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s' ,格式包含打印日志的时间、文件名、行号、日志的级别以及日志的信息。


4、从配置文件中读取详细的配置信息
对于复杂的配置可以将日志的配置信息独立出来,使用logging.config模块的fileConfig函数读取配置文件。配置和代码的分离可以方便修改与运维。

接下来就是主角logging.cnf中的内容了。在配置文件中,包含了三大主要模块:loggers, handlers, formatters。
loggers : 配置logger信息。必须包含一个名字叫做root的logger,当使用无参函数logging.getLogger()时,默认返回root这个logger,其他自定义logger可以通过 logging.getLogger("xxx") 方式进行调用。
handlers:定义声明handlers信息。常用的handlers包括 StreamHandler(仅将日志输出到kong控制台)、FileHandler(将日志信息输出保存到文件)、RotaRotatingFileHandler(将日志输出保存到文件中,并设置单个日志wenj文件的大小和日志文件个数)
formatter : 设置日志格式。
ogger_xxx : 对loggers中声明的logger进行逐个配置,且要一一对应。
handler_xxx : 对handlers中声明的handler进行逐个配置,且要一一对应。
formatter_xxx : 对声明的formatterjinx进行配置。
笔者的配置文件如下:

在程序中调用配置文件,logger设置为simpleExample 。

运行程序,在日志文件app_logging.log中可以查看到信息。

因为设置了TimedRotating,日志每天按时间自动更换,这样就可以保证日志单个文件不会太大。日志文件app_logging.log就会变为app_logging.log.2021-07-22以日期来重命名。配置文件中:args = ('app_logging.log', 'midnight', 1, 10) ,里面四个参数代表filename、when、interval、backupCount]。意思就是每天夜里日志轮转,保留10个日志文件。需要注意的是,每天夜里也是需要执行整个python时候才会生成以日期为结尾的日志文件。
TimedRotating的功能和systemd-tmpfiles有点像,在使用时就可以直接配置保留日志,避免日志过大过多,而不必使用额外的脚本来判断删除,在实际运用中十分有用。具体的参数解释如下:
filename 是输出日志的文件名称前缀。
when 是一个字符串,定义了日志切分的间隔时间单位,是一个枚举类。

interval 是间隔时间单位的个数,指等待多少个 when 的时间后 Logger 会自动重建新闻继续进行日志记录。
backupCount 是保留日志的文件个数,默认的参数是0,这种设置下是不会自动删除文件的。如果设置为 N(正整数),则会在创建新的日志文件时会检查日志文件个数是否到达 N,达到了的话就会从最先创建的开始删除,从而达到维持日志文件个数为 N 个的目标。
网友评论