【Python】 日志管理之loguru库-自定义日志旋转和压缩

loguru 是一个友好的python 日志库

但目前版本尚存在一些问题,比如: logger.add创建的文件是根据应用程序的启动时间来旋转的,而不是基于文件的创建日期

比如说你设置一天一次旋转,但是需要你下次程序再次启动和这次程序启动时间差一天才会旋转,而不是程序运行够一天时间就会旋转。

自定义旋转

作者原本的目的是让每次启动应用程序时启动一个新的日志文件(例如,使用log .add("file_{time}.log"))才有意义。 这样,就不用创建“file_2019-02-18_12:00 -00”。日志”、“file_2019-02-18_13-00-00。日志”、“file_2019 - 02 - 18 - _14 - 00 - 00. -日志”…无限期地,这只保留最新的

但这样显示不符合更高的需求实现,比如说我想实现 一个小时一个日志文件,最近7天的保留, 超过7天的,按天压缩后存储

这样一个小时一个文件的就没办法实现,所以才需要自定义函数,可喜的是logger.add的各个旋转参数都支持传入函数,比如我想实现一个小时一个文件,就可以使用如下代码:

一小时一文件

def should_rotate(message, file):
    filepath = os.path.abspath(file.name)
    creation = os.path.getctime(filepath)
    now = message.record["time"].timestamp()
    maxtime = 60 * 60  # 1 hour in seconds
    return now - creation > maxtime

logger.add("file.log", rotation=should_rotate)
复制代码

超过七天的按天存储

    def logs_func(logs):
        day = datetime.datetime.today().date() - datetime.timedelta(days=3)
        file_list = []
        new_zip = zipfile.ZipFile("request_log_" + str(day) + ".zip", 'w')
        for log in logs:
            filepath = os.path.abspath(log)
            creation = os.path.getctime(filepath)
            if time.gmtime(time.time() - creation).tm_mday == 7:
                file_list.append(log)

        for tar in file_list:
            new_zip.write(tar)

        new_zip.close()

        for tar in file_list:
            filepath = os.path.abspath(tar)
            os.remove(filepath)

	logger.add("file.log", rotation=should_rotate, retention=logs_func)
复制代码

结语

作者也认为基于文件日期创建的旋转参数比应用程序启动时间更有意义。应该未来的版本会更改。 github讨论地址

转载于:https://juejin.im/post/5d02042d5188257a787649c4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值