python logger 日志处理
python logger 日志处理
公司的小程序后台一直运行,要求日志以天为单位分割,每天生成一个新的文件,并且能实时看到当天的日志,为此我做了以下实验
日志处理
创建两个handler
mylog.log 表示日志存储位置
when 表示日志文件创建间隔
interval 表示刷新间隔,每秒刷新一次
backupCount 保留多少个日志文件
import logging
import time
from logging.handlers import TimedRotatingFileHandler
# 创建一个 logger
logger = logging.getLogger("user")
logger.setLevel(logging.INFO)
# 创建一个 handler,用于写入日志文件
save_handler = TimedRotatingFileHandler("mylog.log", when="M", interval=1, backupCount=30)
save_handler.suffix = "%Y-%m-%d-%H-%M.log" # 设置日志文件名的时间戳格式
# 创建一个 handler,用于输出到控制台
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO) # 设置 handler 级别为 INFO
# 创建一个 formatter,用于设置日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 设置 handler 的格式
save_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# 为 logger 添加 handler
logger.addHandler(save_handler)
logger.addHandler(console_handler)
# 记录日志
while True:
time.sleep(1)
logger.info('This is a log info')
如果想改成每天分割,而不是每分钟,需要修改如下部分,这样每天晚上分割日志
ps: (这里踩了坑,中间尝试when="D",结果发现他是以当前时间开始计算,到明天的这个时间点为一天,导致日志分割混乱。对此有三种解决方法:1.改成如下midnight,用它自己的方法去判断分割。2每天晚上24:00定时重启程序,但这样仍会有少量日志混杂。3.自己写判断时间。不过最方便的还是1,所以还是按照下面来吧)
save_handler = TimedRotatingFileHandler("mylog.log", when="midnight", interval=1, backupCount=30)
save_handler.suffix = "%Y-%m-%d.log" # 设置日志文件名的时间戳格式
扩展
when 是一个字符串,定义了日志切分的间隔时间单位,这是一个枚举类,可选参数如下:
"S":Second 秒
"M":Minutes 分钟
"H":Hour 小时
"D":Days 天
"W":Week day(0 = Monday)
"midnight":Roll over at midnight
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2022-09-09 python centos7安装python3
2022-09-09 go gin验证码
2022-09-09 go Air实时加载
2022-09-09 go gin日志
2022-09-09 go gin参数验证
2022-09-09 go gin会话控制
2022-09-09 go gin渲染