django中使用日志模块-loguru

  • loguru 是一个替代 Python logging 的第三方库;
  • loguru的用法非常简单,在 loguru 中有且仅有一个对象:logger。

1、基本使用方式:

安装模块后直接导入使用即可!

from loguru import logger
logger.info("11111111111111111111")
logger.warning("11111111111111111111")
logger.error("11111111111111111111")

输出效果:
在这里插入图片描述

安装:

这里有个注意点: 安装固定的版本!!

python环境3.10,最新版本0.7.3,会报错: 
    ModuleNotFoundError: No module named 'win32_setctime'
# 先卸载当前版本
pip uninstall loguru -y
# 安装一个稳定版本(例如0.7.2,可根据你之前的版本调整)
pip install loguru==0.7.2

安装后就可以直接使用了,如果需要自定义配置和输出保存日志,再进行如下封装:

2、二次封装:

封装的日志模块路径:common—>utils–>logu文件夹中;
可以根据自己需求根据注释调整日志代码即可!
在这里插入图片描述
setting.py

"""
-*- coding: utf-8 -*-
@File  : setting.py
描述:日志框架的配置
"""
import os
from pathlib import Path

# 获取项目根目录
# project_root = settings.BASE_DIR
# 日志文件存储配置
LOGURU_FILE = {
    "is_show": "off",
    "level": "ERROR",
    'path': os.path.join(Path(__file__).parent, 'logs', 'test{time:YYYY-MM-DD}.logu'),
    "rotation": "10MB",
    'retention': "7days",
}
# 日志控制台配置
LOGURU_CONSOLE = {
    "is_show": "on",  # 配置是否开启控制台打印日志
    "level": "INFO",  # 最低打印级别是info级别
}
"""
TRACE: 最详细的日志信息,用于追踪代码执行过程。Loguru默认情况下使用DEBUG级别作为最低日志记录级别,而不是TRACE级别。这是因为TRACE级别会产生大量的日志信息。
DEBUG: 用于记录详细的调试信息,通常只在开发过程中使用,以帮助诊断问题。
INFO: 用于记录常规信息,比如程序的正常运行状态或一些关键的操作。
SUCCESS: 通常用于记录操作成功的消息,比如任务完成或数据成功保存。
WARNING: 用于记录可能不是错误,但需要注意或可能在未来导致问题的事件。
ERROR: 用于记录错误,这些错误可能会影响程序的某些功能,但通常不会导致程序完全停止。
CRITICAL: 用于记录非常严重的错误,这些错误可能会导致程序完全停止或数据丢失。
"""

log.py

"""
-*- coding: utf-8 -*-
@File  : log.py
描述:logu 封装类!
"""
import os
from pathlib import Path
from loguru import logger
import sys
from common.utils.logu import setting


class LoguruConfig:
    def __init__(self):
        self._file_set = setting.LOGURU_FILE
        self._console_set = setting.LOGURU_CONSOLE

    def configure(self):
        logger.remove()  # 清除所有现有的日志处理器(如果有的话)
        # 控制台输出
        if self._console_set.get('is_show', '').lower() == "on":
            # 设置处理程序处理的日志消息的最低级别。
            level = self._console_set.get('level', 'INFO')
            # 只需要在add方法中添加配置即可!
            logger.add(
                # 定义日志消息的输出位置,可以是文件路径、标准输出(stdout)、标准错误(stderr,默认)或其他自定义的输出位置。
                sink=sys.stderr,
                # format="{time:xxxx过滤条件} {level:xxxxxxxx过滤条件} {message}" 日志的格式化显示配置
                # logger.add('runtime.log', format="{time} {level} {message}", filter="my_module", level="INFO")
                # 以下是自定义显示样式,默认的就挺好看了!
                format="<level>{level:<8}|  </level>"  # level显示设置宽度占8个字符
                       "<u><green>{file.path}:{line}</green></u> : \r\n"
                       "        "
                       "<level>{message}</level>",  # 显示的日志信息
                colorize=True,  # 默认是True level会根据不同级别显示不同颜色
                enqueue=True,  # 异步日志
                backtrace=True,  # 确定异常跟踪是否应该延伸到捕获错误的点之外
                diagnose=True,  # 确定变量值是否应在异常跟踪中显示
            )
            # 在本目录下生成日志文件  注意:此行为了简单使用,可以直接添加输出到当前目录!
            # logger.add('logu.log')
        # 文件保存
        if self._file_set.get('is_show', '').lower() == "on":
            log_path = self._file_set.get('path', os.path.join(Path(__file__).parent.parent.parent, '../../../logs',
                                                               'test{time:YYYY-MM-DD}.logu'))
            level = self._file_set.get('level', 'INFO')
            rotation = self._file_set.get('rotation', '10MB')
            retention = self._file_set.get('retention', '7 days')
            logger.add(
                log_path,
                rotation=rotation,  # 日志的最长保留时间!
                retention=retention,  # 用于设置日志文件的保留时间。
                compression='zip',  # 布尔值,指定 配置文件的压缩格式
                encoding="utf-8",
                enqueue=True,  # 异步日志 布尔值,指定是否将日志消息放入队列中处理,用于多线程应用中避免阻塞。
                format="[{time:YYYY-MM-DD HH:mm:ss} {level:<6} | {file}:{module}.{function}:{line}]  {message}",
                level=level,
            )

# 给logger对象添加自定义配置
config = LoguruConfig()
config.configure()
log = logger;  # 调整名字为log
if __name__ == '__main__':
    # 测试
    log.debug("这是一条跟踪消息")  # 不打印
    log.info("这是一条普通信息")  # 设置了打印info级别及以上
    log.success("操作成功完成")
    log.warning("这是一条警告信息")
    log.error("这是一条错误信息")
    log.critical("这是一条严重错误信息")

init.py

"""
-*- coding: utf-8 -*-
描述: 注意安装 pip install logu
"""
from .log import log

使用封装的loguru:

导包:

from common.utils import log

使用:

	log.debug("这是一条跟踪消息")  # 不打印
    log.info("这是一条普通信息")  # 设置了打印info级别及以上
    log.success("操作成功完成")
    log.warning("这是一条警告信息")
    log.error("这是一条错误信息")
    log.critical("这是一条严重错误信息")
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐