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 day0 = Monday)
"midnight":Roll over at midnight
posted @   liwenchao1995  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用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渲染
点击右上角即可分享
微信分享提示