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
posted @ 2023-09-09 07:19  liwenchao1995  阅读(28)  评论(0编辑  收藏  举报