python日志解决方案-loguru

loguru

pip install loguru
官方文档 https://loguru.readthedocs.io/en/stable/overview.html

教程

from loguru import logger

logger.add("interface_log_{time}.log", rotation="500MB", encoding="utf-8", enqueue=True, compression="zip", retention="10 days")
logger.info("中文")
  • enqueue=True 代表异步写入,官方的大概意思是:在多进程同时往日志文件写日志的时候使用队列达到异步功效
  • rotation 可以理解成日志的创建时机,可以有多种写法
    • rotation="500 MB" :当日志文件达到500MB时就会重新生成一个文件
    • rotation="12:00" :每天12点就会创建新的文件、
    • rotation="1 week" :每隔一周创建一个log
  • retention 配置日志的最长保留时间,官方例子: "1 week, 3 days"、"2 months"
  • compression 配置文件的压缩格式,可以配置常见的格式 zip、tar、gz、tar.gz 等

示例

import datetime
from loguru import logger
import os


class LogHandler:
    """
    按日期创建日志文件
    info、error类型的日志分别写入不同的文件,info日志包含了error日志。
    """
    PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    LOG_PATH = os.path.join(PATH, "logs")
    today_now = f"{datetime.datetime.now().year}_{datetime.datetime.now().month}_{datetime.datetime.now().day}"
    logger.add(os.path.join(LOG_PATH, f'info_{today_now}.log'), rotation="00:01", format="{time} {level} -> {message}",
               encoding="utf-8", level="INFO")
    logger.add(os.path.join(LOG_PATH, f"error_{today_now}.log"), rotation="00:01", format="{time} {level} -> {message}",
               encoding="utf-8", level="ERROR")

    @staticmethod
    def log():
        return logger


if __name__ == '__main__':
    log = LogHandler.log()
    log.info("就是这么简单,调用即可")

    # 捕捉函数运行过程中的错误,输出日志
    @log.catch
    def my_function(x, y, z):
        # An error? It's caught anyway!
        return 1 / (x + y + z)


    my_function(0, 0, 0)


    def mistake(a, b):
        try:
            print(a / b)
        except ZeroDivisionError:
            # 将捕获到的错误输出
            log.exception("?")


    log.info("开始执行函数")
    mistake(1, 0)
    log.info("函数执行完成!")

原文地址:https://www.cnblogs.com/jianjiacangcang/p/15059167.html