python怎么生成日志_python 日志文件(每分钟生成一个,但只保存4个)

日志文件如果写在一个文件中,是很麻烦的事,不便于错误的排查。而且随着项目运行的时间越来越长,日志文件也会也来越大,影响系统性能。

所以日志切割是一件很有必要的事情,logging库已经给我们提供这个方法TimedRotatingFileHandler,对日志可以按照周(W)、天(D)、时(H)、分(M)、秒(S)进行切割,详细介绍[在这里](https://docs.python.org/3.5/library/logging.handlers.html#logging.handlers.TimedRotatingFileHandler)。

import logging

from logging.handlers import TimedRotatingFileHandler

LOG_FORMAT = "%(asctime)s=====%(levelname)s=====%(message)s"

log_path = 'logs/run_log.log'

# 每分钟生成一个日志文件 只保存4个日志文件

logger = TimedRotatingFileHandler(log_path, when="M", interval=1, backupCount=4, encoding='utf-8')

logger.suffix = "%Y-%m-%d_%H-%M.log"

# 一定要与suffix对应,否则过期文件不会删除

logger.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}.log$")

logger.setFormatter(logging.Formatter(LOG_FORMAT))

# debug 以上的内容输出到文件里面

# logger.setLevel('DEBUG')

logger.setLevel(logging.DEBUG)

log = logging.getLogger()

log.setLevel('DEBUG')

log.addHandler(logger)

# 将日志内容也输出到运行界面

console = logging.StreamHandler()

console.setLevel(logging.DEBUG)

console.setFormatter(logging.Formatter(LOG_FORMAT))

log.addHandler(console)

#### 每日天输出一个日志文件 (未测试)

# 在午夜生成日志文件

logger = TimedRotatingFileHandler(log_path, when="midnight", interval=1, backupCount=7, encoding='utf-8')

logger.suffix = "%Y-%m-%d.log"

# 一定要与suffix对应,否则过期文件不会删除

logger.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}.log$")

logger.setFormatter(logging.Formatter(LOG_FORMAT))

# debug 以上的内容输出到文件里面

logger.setLevel(logging.DEBUG)

log = logging.getLogger()

log.setLevel('DEBUG')

log.addHandler(logger)

console = logging.StreamHandler()

console.setLevel(logging.DEBUG)

console.setFormatter(logging.Formatter(LOG_FORMAT))

log.addHandler(console)suffix是指日志文件名的后缀,suffix中通常带有格式化的时间字符串,filename和suffix由“.”连接构成文件名(例如:filename=“runtime”, suffix=“%Y-%m-%d.log”,生成的文件名为runtime.2015-07-06.log)。

extMatch是一个编译好的正则表达式,用于匹配日志文件名的后缀,它必须和suffix是匹配的,如果suffix和extMatch匹配不上的话,过期的日志是不会被删除的。比如,suffix=“%Y-%m-%d.log”, extMatch的只应该是re.compile(r”^\d{4}-\d{2}-\d{2}.log$”)。

默认情况下,在TimedRotatingFileHandler对象初始化时,suffxi和extMatch会根据when的值进行初始化:

‘S’: suffix=”%Y-%m-%d_%H-%M-%S”, extMatch=r”\^d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}”;

‘M’:suffix=”%Y-%m-%d_%H-%M”,extMatch=r”^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}”;

‘H’:suffix=”%Y-%m-%d_%H”,extMatch=r”^\d{4}-\d{2}-\d{2}_\d{2}”;

‘D’:suffxi=”%Y-%m-%d”,extMatch=r”^\d{4}-\d{2}-\d{2}”;

‘MIDNIGHT’:”%Y-%m-%d”,extMatch=r”^\d{4}-\d{2}-\d{2}”;

‘W’:”%Y-%m-%d”,extMatch=r”^\d{4}-\d{2}-\d{2}”;

如果对日志文件名没有特殊要求的话,可以不用设置suffix和extMatch,如果需要,一定要让它们匹配上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值