Python logging模块handlers用法详解
作者:蓝 寅 发布时间:2022-08-24 18:08:08
一、handlers是什么?
logging模块中包含的类
用来自定义日志对象的规则(比如:设置日志输出格式、等级等)
常用3个子类:StreamHandler、FileHandler、TimedRotatingFileHandler
二、handlers基础应用
2.1 StreamHandler 控制台输出日志
import logging
#创建一个logger日志对象
logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG) #设置默认的日志级别
#创建日志格式对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
#创建StreamHandler对象
sh = logging.StreamHandler()
#StreamHandler对象自定义日志级别
sh.setLevel(logging.DEBUG)
#StreamHandler对象自定义日志格式
sh.setFormatter(formatter)
logger.addHandler(sh) #logger日志对象加载StreamHandler对象
#日志输出
logger.info('newdream')
上面代码执行后,会在控制台输出日志信息。
2.2 FileHandler 日志输出到文件
import logging
#创建一个logger日志对象
logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG) #设置默认的日志级别
#创建日志格式对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
#创建FileHandler对象
fh = logging.FileHandler('test.log')
#FileHandler对象自定义日志级别
fh.setLevel(logging.DEBUG)
#FileHandler对象自定义日志格式
fh.setFormatter(formatter)
logger.addHandler(fh) #logger日志对象加载FileHandler对象
#日志输出
logger.info('newdream')
上面代码执行后,控制台不会输出日志信息,而会在当前文件夹新建一个test.log日志文件进行日志记录。
2.3 TimedRotatingFileHandler 日志分割
import logging
from logging import handlers
#创建一个logger日志对象
logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG) #设置默认的日志级别
#创建日志格式对象
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
#创建TimedRotatingFileHandler对象
rh = handlers.TimedRotatingFileHandler("test.log", when='S', interval=1, backupCount=5)
#TimedRotatingFileHandler对象自定义日志级别
rh.setLevel(logging.DEBUG)
#TimedRotatingFileHandler对象自定义日志级别
rh.suffix = "%Y_%m_%d_%H_%M_%S.log"
#TimedRotatingFileHandler对象自定义日志格式
rh.setFormatter(formatter)
logger.addHandler(rh) #logger日志对象加载TimedRotatingFileHandler对象
#日志输出
logger.info('newdream')
上面代码执行后,控制台不会输出日志信息,而会在当前文件夹新建一个 test_年_月_日_时_分_秒.log 日志文件进行日志记录。
在使用TimedRotatingFileHandler创建对象时,它的构造函数定义如下:
TimedRotatingFileHandler(filename [,when [,interval [,backupCount]]])
filename:是输出日志文件名的前缀,比如log/myapp.log
when:按什么日期格式切分,接收指定字符串参数,接收的值如下:
“S”: Seconds
“M”: Minutes
“H”: Hours
“D”: Days
“W”: Week day (0=Monday)
“midnight”: Roll over at midnight
interval 是指等待多少个单位when的时间后,Logger会自动重建文件,这个文件的创建取决于filename+suffix,若这个文件跟之前的文件有重名,则会自动覆盖掉以前的文件,所以有些情况suffix要定义不能因为when而重复。
backupCount 是保留日志个数。默认的0是不会自动删除掉日志。若设为5,则在文件的创建过程中库会判断是否有超过这个5,若超过,则会从最先创建的开始删除。
三、小结
以上的日志实例为了让读者更清晰的操作和理解,分开代码单独实现
在 2.3 中 如果想实现看是否达到5个日志就删除的效果,可以把日志用循环输出,如下:
while True:
logger.info('newdream')
三种handlers日志可以共同使用,都是独立的handler对象,但一般 FileHandler 和 TimedRotatingFileHandler 不会同时使用。
来源:https://www.cnblogs.com/dream66/p/12825148.html


猜你喜欢
- 数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取
- 首先上一段程序:import numpy as nplist_a = list(range(10))print("list_a:
- vim /etc/my.cnf注释这一行:bind-address=127.0.0.1 ==> #bind-address=127.0
- 识别快递单号这次跟老师做项目,这项目大概是流水线上识别快递上的快递单号。首先我尝试了解条形码的基本知识 百度百科:条形码 条形码(barco
- [LeetCode] 185.Department Top Three Salaries 系里前三高薪水The Employee&
- 这里介绍的是直接在package.json中直接配置使用:1.基础配置"build": { // 这里是el
- 仿照微信朋友圈做了一个界面如下,先看效果:1、点开界面2、选择图片3、点击上传4、动态显示第一个页面的wxml:<view class
- 目录问题复现隐式转换总结参考问题在工作中发现,有一个接口只执行一条SQL查询语句,并且SQL明明使用了主键列,但是速度很慢。在MySQL中E
- 没人愿意等待。所以,没有访问者真的能够忍受一个打开速度极慢的网站。但是,网页打开速度到底对用户行为有什么影响,恐怕没几个人能够说清楚吧。前几
- 完整代码<!doctype html><html lang="en"><head>
- 准备工作安装anaconda,官网下载安装,笔者安装在"D:\Anaconda3"安装好之后,查看环境变量path中是否
- 总有人认为linux搭建php环境很复杂,然后尝试安装lnmp一键安装包。其实说白了就是安装一个web服务器,然后支持php即可,很简单的,
- 哪里出问题了python 中,使用 global 会将全局变量设为本函数可用。同时,在函数内部访问变量会先本地再全局。在嵌套函数中,使用 g
- JS脚本语言的基础语法:输出语法 alert("警告!"); confirm("确定吗
- 有一个需求是要在一个云监控的状态值中存储多个状态(包括可同时存在的各种异常、警告状态)使用了位运算机制在一个int型中存储。现在监控日志数据
- 我设了两个SESSION:SESSION(A1),SESSION(A2),然后我现在想结束其中一个SESSION(如:ESEEION(A1)
- 本文实例讲述了Python HTML解析模块HTMLParser用法。分享给大家供大家参考,具体如下:简介先简略介绍一下。实际上,HTMLP
- 一、安装selenium打开命令控制符输入:pip install -U selenium火狐浏览器安装firebug:www.firebu
- 本文实例讲述了Python3.5集合及其常见运算。分享给大家供大家参考,具体如下:1、集合的定义:集合是一个无序的、无重复的数据的数据组合。
- 我们都知道,可以使用高德地图api实现经纬度与地址的转换。那么,当我们有很多个地址与经纬度,需要批量转换的时候,应该怎么办呢?在这里,选用高