加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[bigdata-078] python3 logging 的示例 TimedRotatingFileHandle

发布时间:2020-12-14 03:11:06 所属栏目:大数据 来源:网络整理
导读:1. 官网文档 https://docs.python.org/3/library/logging.html 2. logger不会直接实例化。而是以logging.getLogger(name)方式实例化,如果多次以同一个name获取logger,那么返回的都是同一个logger。 name可以是形如foo.bar.baz,bar是foo的子logger,因此,
1. 官网文档
https://docs.python.org/3/library/logging.html


2. logger不会直接实例化。而是以logging.getLogger(name)方式实例化,如果多次以同一个name获取logger,那么返回的都是同一个logger。


name可以是形如foo.bar.baz,bar是foo的子logger,因此,建议以类似python包的结构,组织多种logger。推荐 logging.getLogger(__name__)


3. 对log,通常有一种想要的效果:log按天切分,每天一个log文件,保留三天内的log,过期删除。
3.1 使用TimedRotatingFileHandler
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,若超过,则会从最先创建的开始删除。

#!/usr/bin/env python3

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文件
filehandler = logging.handlers.TimedRotatingFileHandler("logs/myapp.log",when='S',interval=1,backupCount=3)
# 设置后缀名称,跟strftime的格式一样
filehandler.suffix = "%Y-%m-%d_%H-%M-%S.log"
myapp.addHandler(filehandler)

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

注意:filehanlder.suffix的格式必须这么写,才能自动删除旧文件,如果设定是天,就必须写成“%Y-%m-%d.log”,写成其他格式会导致删除旧文件不生效。这个配置在源码里能看出来,但是在官方文档并没有说明这一点!!!!!!!!!!

3.2 RotatingFileHandler基于文件大小切分

这个配置是可以生效的,符合预期

#!/usr/bin/env python3

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=100,backupCount=5)

# 设置后缀名称,跟strftime的格式一样
myapp.addHandler(handler)

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读