日志回滚:python(日志分割)

摘要:
拆分日志的触发条件:大小、日期或大小加日期。常见的日志代码按天拆分:on day_Importtimeimportlogginginimportlogging in log.py Handlerimports#如果日志文件夹不存在,请创建一个log_Dir=“log-day”#日志存储文件夹名称log_path=os.getcwd()+os.sep+log_Dirifnotos。路径isdir:os。makedirs#日志记录初始化日志记录。basicConfig()#myapp初始化myapp=日志记录。getLoggermyapp SetLevel#添加TimedRotatingFileHandler#定义一个处理程序,该处理程序每天更改一次日志文件#保留三个旧日志文件timefilehandler=logging。处理程序。TimedRotatingFileHandler#设置后缀名,其格式与strftime timefilehandler的格式相同。后缀=“%Y-%m-%d_%H-%m-%S.log”#时间文件处理程序。后缀=“%Y-%m-%d.log”格式化程序=日志记录。Formattertimefilehandler。setFormattermyapp。addHandlerwh ileTrue:time.sleepmyapp信息1.根据时间回滚。使用TimedRotatingFileHandler进行日志记录。它通常具有所需的效果:日志按天拆分,每天一个日志文件,保留三天内的日志,过期后删除日志。BackupCount是保留的日志数。

日志回滚:python

什么是日志回滚?

答:

将日志信息输出到一个单一的文件中,随着应用程序的持续使用,该日志文件会越来越庞大,进而影响系统的性能。因此,有必要对日志文件按某种条件进行切分,要切分日志文件。

分割日志的触发条件:大小、日期,或者大小加上日期。

说是切分,实际上是,当一个日志文件达到触发条件后,对日志文件进行重命名,之后再新建原来名称的日志文件(此时就是空文件了),新产生的日志就写入新的日志文件。

为啥叫回滚呢?当分割的日志文件达到指定数目的上限个数时,最老的日志文件就会被删除。

logging库提供了两个可以用于日志滚动的class,一个是RotatingFileHandler,它主要是根据日志文件的大小进行滚动,另一个是TimeRotatingFileHandler,它主要是根据时间进行滚动。在实际应用中,我们通常根据时间进行滚动。 

常用按天分割日志代码:

在day_log.py中

import time
import logging
import logging.handlers
import os

# 如果日志文件夹不存在,则创建
log_dir = "log-day"  # 日志存放文件夹名称
log_path = os.getcwd() + os.sep + log_dir
if not os.path.isdir(log_path):
    os.makedirs(log_path)

# logging初始化工作
logging.basicConfig()

# myapp的初始化工作
myapp = logging.getLogger('myapp')
myapp.setLevel(logging.INFO)

# 添加TimedRotatingFileHandler
# 定义一个1天换一次log文件的handler
# 保留3个旧log文件
timefilehandler = logging.handlers.TimedRotatingFileHandler(
    log_dir + os.sep + "sec.log",
    when='D',
    interval=1,
    backupCount=3
)
# 设置后缀名称,跟strftime的格式一样
timefilehandler.suffix = "%Y-%m-%d_%H-%M-%S.log"
# timefilehandler.suffix = "%Y-%m-%d.log"

formatter = logging.Formatter('%(asctime)s|%(name)-12s: %(levelname)-8s %(message)s')
timefilehandler.setFormatter(formatter)
myapp.addHandler(timefilehandler)

while True:
    time.sleep(6)
    myapp.info("test")

  

1、按照时间回滚(就是按时间分割日志,并且限制日志文件的个数,删除早期的日志)

使用TimedRotatingFileHandler

对log,通常有一种想要的效果:log按天切分,每天一个log文件,保留三天内的log,过期删除。

import time
import logging
import logging.handlers

# logging初始化工作
logging.basicConfig()

# myapp的初始化工作
myapp = logging.getLogger('myapp')
myapp.setLevel(logging.INFO)

# 添加TimedRotatingFileHandler
# 定义一个1秒换一次log文件的handler
# 保留3个旧log文件
timefilehandler = logging.handlers.TimedRotatingFileHandler("log1/myapp.log", when='S', interval=1, backupCount=3)
# 设置后缀名称,跟strftime的格式一样
timefilehandler.suffix = "%Y-%m-%d_%H-%M-%S.log"

formatter = logging.Formatter('%(asctime)s|%(name)-12s: %(levelname)-8s %(message)s')
timefilehandler.setFormatter(formatter)
myapp.addHandler(timefilehandler)

while True:
    time.sleep(0.1)
    myapp.info("test")

  


注意:filehanlder.suffix的格式必须这么写,才能自动删除旧文件,如果设定是天,就必须写成“%Y-%m-%d.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是不会自动删除掉日志。若设3,则在文件的创建过程中
库会判断是否有超过这个3,若超过,则会从最先创建的开始删除。

2、按照大小回滚


RotatingFileHandler基于文件大小切分
这个配置是可以生效的,符合预期

import time
# import logging
import logging.handlers

# logging初始化工作  
logging.basicConfig()

# myapp的初始化工作  
myapp = logging.getLogger('myapp')
myapp.setLevel(logging.INFO)

# 写入文件,如果文件超过100个Bytes,仅保留5个文件。  
handler = logging.handlers.RotatingFileHandler(
    'logs/myapp.log', maxBytes=500, backupCount=5)

formatter = logging.Formatter('%(asctime)s|%(name)-12s: %(levelname)-8s %(message)s')
handler.setFormatter(formatter)
# 设置后缀名称,跟strftime的格式一样  
myapp.addHandler(handler)

while True:
    time.sleep(0.1)
    myapp.info("file test")

  

3、同时按照时间和大小回滚

 参考:https://www.cnblogs.com/yonghuacui/p/6177886.html

免责声明:文章转载自《日志回滚:python(日志分割)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇钉钉小程序中canvas绘图模糊(环形进度条 )new Date 时间赋值方式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【python】flask+nginx配置

背景信息 有wordpress服务A 有flask服务B, gunicorn启动,8个进程 用nginx代理,实现访问A然后跳转到B 问题 flask服务B上有文件上传操作,用nginx后发现无法上传大文件。解决: nginx代理配置中有文件大小限制client_max_body_size,修改即可 location /test{...

Nginx应用详解及配置

一、Nginx简介 概述:Nginx是一款由俄罗斯开发的开源的高性能HTTP服务器和反向代理服务器,同时支持IMAP/POP3/SMTP代理服务,其性能优势着为显著,官网上称:单台nginx服务器可以处理50000并发; 特点:高性能、稳定、消耗硬件资源小、能够处理大并发,主要用于静态的解析,动静页面的分离; 功能:   1.作为Web服务器,ngin...

MicroPython刷写固件(一)

烧录固件工具 ESP FLASH DOWNLOAD TOOL 第一步,安装Python环境。这里要注意一下,Python环境分2和3两种,esptool.py是需要在Python2环境下运行的,在Python3环境下会报错。我安装的是Python27,下载地址 安装完成后会提示是否添加环境变量,选择添加环境 变量即可,如果后面在命令提示符中使用Python...

python多进程那点事儿【multiprocessing库】

      前言:项目中有个需求需要对产品的日志处理,按照产品中日志的某些字段,对日志进行再次划分。比如产品的日志中含有字段id,tag=1,现在需要把tag是基数的放到一个文件中,tag是偶数的放入一个文件中。这就涉及到多个文件的读写操作,一个文件一个文件读取写入那时间太久了,公司配备的单机,跑了半个多小时,光标还是一直在闪闪闪【你懂得】。没办法了,还是...

cocos2d环境搭建

cocos2d是一个开源免费的Python 2D游戏引擎,至于iphone上面的cocos2d-iphone在代码的结构上基本与这个一样,不过cocos2d-iphone因为收到iphone开发者的积极追捧,而更新频繁,功能越来越强大。而cocos2d好像已经停止更新,最后一个release版本是0.4rc0 在官网也有cocos2d的环境搭建,不过写的太...

Python selenium 延时的几种方法

解决网页加载缓慢的几种方法: 一、显性等待WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待 1 from selenium import webdriver 2 from selenium.webdriver.support.wait import WebDriverWait 3 4...