优雅地使用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月
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjyfx/16267.html