优雅地使用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月