优雅地使用loguru模块管理日志及日志文件轮转的文件名修改

优雅地使用loguru模块管理日志及日志文件轮转的文件名修改

loguru模块日志配置

loguru为开源的第三方日志库,比官方提供的logging库更易用,推荐使用。这是我自己写的loguru模块的配置,可以参考使用。

# -*- coding: utf-8 -*-
import sys

from pathlib import Path
from loguru import logger

LOG_CONFIG = {
    "handlers": [
        {
            "sink": sys.stdout,
            "level": "INFO",
            "filter": lambda record: record["extra"]["env"] == "dev",
            "format": "<green>{time:YYYY-MM-DD HH:mm:ss}</green> [<level>{level}</level>] <level>{module}:{line}</level>> <level>{message}</level>",
        },
        {
            "sink": sys.stdout,
            "level": "INFO",
            "filter": lambda record: record["extra"]["env"] == "test",
            "format": "<green>{time:YYYY-MM-DD HH:mm:ss}</green> [<level>{level}</level>] <level>{module}:{line}</level>> <level>{message}</level>",
        },
        {
            "sink": Path(__file__).resolve().parent.joinpath("log", "{time:YYYY-MM}", "{time:YYYY-MM-DD}", "dev", "pythonlog.log").__str__(),
            "level": "DEBUG",
            "filter": lambda record: record["extra"]["env"] == "dev",
            "format": "<green>{time:YYYY-MM-DD HH:mm:ss}</green> [<level>{level}</level>] <level>{module}:{line}</level>> <level>{message}</level>",
            "rotation": "10 MB",
            "retention": "60 days"
        },
        {
            "sink": Path(__file__).resolve().parent.joinpath("log", "{time:YYYY-MM}", "{time:YYYY-MM-DD}", "test", "pythonlog.log").__str__(),
            "level": "DEBUG",
            "filter": lambda record: record["extra"]["env"] == "test",
            "format": "<green>{time:YYYY-MM-DD HH:mm:ss}</green> [<level>{level}</level>] <level>{module}:{line}</level>> <level>{message}</level>",
            "rotation": "10 MB",
            "retention": "60 days"
        },
        {
            "sink": Path(__file__).resolve().parent.joinpath("log", "{time:YYYY-MM}", "{time:YYYY-MM-DD}", "dev", "error.log").__str__(),
            "level": "ERROR",
            "filter": lambda record: record["extra"]["env"] == "dev",
            "format": "<green>{time:YYYY-MM-DD HH:mm:ss}</green> [<level>{level}</level>] <level>{module}:{line}</level>> <level>{message}</level>",
            "rotation": "10 MB",
            "retention": "60 days"
        },
        {
            "sink": Path(__file__).resolve().parent.joinpath("log", "{time:YYYY-MM}", "{time:YYYY-MM-DD}", "test", "error.log").__str__(),
            "level": "ERROR",
            "filter": lambda record: record["extra"]["env"] == "test",
            "format": "<green>{time:YYYY-MM-DD HH:mm:ss}</green> [<level>{level}</level>] <level>{module}:{line}</level>> <level>{message}</level>",
            "rotation": "10 MB",
            "retention": "60 days"
        }
    ],
    "extra": {
        "env": "dev"
    }
}


logger.remove()
logger.configure(**LOG_CONFIG)


if __name__ == '__main__':
    logger.info("dev log")
    tlogger = logger.bind(env="test")
    tlogger.info("test log")

日志文件轮转的文件名修改

日志文件轮转的文件名修改需要修改loguru模块的源代码,在源代码中找到generate_rename_path(root, ext, creation_time)方法并修改即可。

# -*- coding: utf-8 -*-

def generate_rename_path(root, ext, creation_time):
    creation_datetime = datetime.datetime.fromtimestamp(creation_time)
    date = FileDateFormatter(creation_datetime)

    renamed_path = "{}.{}{}".format(root, date, ext)
    counter = 1

    while os.path.exists(renamed_path):
        counter += 1
        renamed_path = "{}.{}.{}{}".format(root, date, counter, ext)

    return renamed_path

如修改为下面的代码

# -*- coding: utf-8 -*-

def generate_rename_path(root, ext, creation_time):
    renamed_path = "{}{}".format(root, ext)
    counter = 1

    while os.path.exists(renamed_path):
        counter += 1
        renamed_path = "{}.{}{}".format(root, counter, ext)

    return renamed_path

注意

我使用的loguru库的版本为0.7.2,其它版本可能不适用

文章编写于2023年12月

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值