9、logging模块[python]

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

利用pythonlogging模块可以很简单的记录程序运行中的各种日志,尽管自己写一个函数,将程序运行日志写到文件并不是很难,但已经有了logging模块,这大可不必自己动手。


一、logging模块介绍

1.1 日志级别

日志一共分为5个等级,各个等级记录的信息有所差异:

级别说明
DEBUG输出详细的运行情况,主要用于调试
INFO确认一切按预期运行,一般用于输出重要运行情况
WARNING一些意想不到的事情发生了(比如:“警告:内存空间不足”),但是这个软件还能按期工作,在不久的将来会出现问题
ERROR发生了错误,软件没能执行一些功能,还可以继续执行
CRITICAL一个严重的错误,表明程序本身可能无法继续运行
修改级别logging.root.setLevel('INFO')

这5个等级,也分别对应5种打日志的方法:debug、info、warning、error、critical
默认是WARNING,当错误级别在WARNING或之上时才能被跟踪.

1.2 日志收集器

在这里插入图片描述

1.2.1 创建日志收集器输出到控制台:

import logging

# 1、日志收集器的创建:logging.getLogger(名称)
http_log = logging.getLogger('TESTLEAF')

# 2、设置日志收集的等级为DEBUG:规定日志收集等级
http_log.setLevel('DEBUG')

# 3、创建一个日志输出渠道(控制台), 规定控制台输出等级
sh = logging.StreamHandler()
sh.setLevel('DEBUG')

# 4、将输出渠道(控制台)添加到日志收集器中
http_log.addHandler(sh)

http_log.debug('---------DEBUG------------')
http_log.info('----------info-------------')

1.2.2 创建日志收集器输出到文件:

import logging

# 1、日志收集器的创建:logging.getLogger(名称)
http_log = logging.getLogger('TESTLEAF')

# 2、设置日志收集的等级为DEBUG:规定日志收集等级
http_log.setLevel('DEBUG')

# 3、创建一个日志输出渠道(文件)
fh = logging.FileHandler(r'logs\testleaf.log', encoding='utf-8')
fh.setLevel('ERROR') # 规定日志文件输出等级

# 6、将日志输出渠道添加到日志收集器
http_log.addHandler(fh)

http_log.info('----------info-------------')
http_log.warning('-------warning----------')
http_log.error('----------error-----------')

二、格式化输出

2.1 输出格式

可以通过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:打印日志信息
在工作中给的常用格式如下:

formats = '%(asctime)s - [%(filename)s-->line:%(lineno)d] - %(levelname)s: %(message)s'
import logging

#1、日志收集器的创建:logging.getLogger(名称)
http_log = logging.getLogger('TESTLEAF')

#2、设置日志收集的等级为DEBUG:规定收集等级
http_log.setLevel('DEBUG')

#3、设置输出格式
mats='%(asctime)s - [%(filename)s-->line:%(lineno)d] - %(levelname)s: %(message)s'
mat= logging.Formatter(mats)

#4、创建一个日志输出渠道(文件)
fh = logging.FileHandler(r'logs\testleaf.log', encoding='utf-8')
fh.setLevel('ERROR') # 规定输出等级
fh.setFormatter(mat) # 为日志输出渠道设置日志输出的格式

#5、将日志输出渠道添加到日志收集器
http_log.addHandler(fh)

http_log.info('----------info-------------')
http_log.warning('-------warning----------')
http_log.error('----------error-----------')

2.2 日志轮转

随着程序运行时间增加,日志的记录越来越大,创建新的日志文件并删除最老的日志文件有了需求。

2.2.1 按日志大小轮转

import logging
from logging.handlers import RotatingFileHandler, TimedRotatingFileHandler

#4、创建一个日志输出渠道(输出到文件的轮转器)
fh = RotatingFileHandler(filepath, maxBytes=500, backupCount=10, encoding='utf-8')
fh.setLevel(f_level)
fh.setFormatter(mat)
#5、将日志输出渠道添加到日志收集器
http_log.addHandler(fh)

#参数:
maxBytes:   设置文件的大小(单位:字节)
backupCount:轮转的文件数量,超过这个数量就删掉最早的

2.2. 2 按时间轮转

# 创建一个按时间轮转的文件输出渠道
fh = TimedRotatingFileHandler(filename = 'testleaf.log',
							  encoding = 'utf-8',
							  when = 'D',
							  interval = 7,
							  backupCount = 10)
# 参数详解:
interval:设置时间间隔
when:设置间隔单位(默认H)
S - Seconds(秒)
M - Minutes(分钟)
H - Hours(小时)
D - Days(天)
backupCount:轮转的文件数量

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值