【Django】Django日志管理

Django日志管理

Django使用Python内置的logging模块处理系统日志。

1.日志框架的组成元素

Python logging 配置由下面四部分组成:

  • Loggers

  • Handlers

  • 过滤器

  • Formatters

1.1 Loggers

logger是日志系统的入口,每个 logger都是命名了的 bucket,消息写入bucket以便进一步处理。

logger 可以配置日志级别,日志级别描述了由该logger处理的消息的严重性,Python 定义了下面几种日志级别:

  • DEBUG:排查故障时使用的低级别系统消息。

  • INFO:一般的系统消息。

  • WARNING:描述系统发生了一些小问题的信息。

  • ERROR:描述系统发生了大问题的信息。

  • CRITICAL:描述系统发生了严重问题的信息。

每一条写入logger的消息都是一条日志记录,每一条日志记录都包含日志级别,代表对应消息的严重程度,日志记录还包含有用的元数据,来描述被记录了日志的事件细节,例如堆栈跟踪或者错误码。

当logger处理一条消息时,会将自己的日志级别和这条消息的日志级别做对比,如果消息的日志级别匹配高于logger的日志级别,它就会被进一步处理,否则这条消息就会被忽略掉。

当logger确定了一条消息需要处理之后,会把它传给Handler。

1.2 Handlers

Handler是决定如何处理logger中每一条消息的引擎,它描述特定的日志行为,例如把消息输出到屏幕、文件或者网络socket。

和logger一样,handler也有日志级别的概念,如果一条日志记录的级别不匹配或者低于handler的日志级别,对应的消息会被handler忽略。

一个logger可以有多个handler,每个handler可以有不同的日志级别,这样就可以根据消息的重要性不同,来提供不同格式的输出。

1.3 过滤器

在日志记录从logger传到handler的过程中,使用filter来做额外的控制。

默认情况下,只要级别匹配,任何日志消息都会被处理。不过,也可以通过添加filter来给日志处理的过程增加额外条件。例如,可以添加一个filter只允许某个特定来源的ERROR消息输出。

Filter换呗用来在日志输出之前对日志记录做修改。例如,可以写一个filter,当满足一定条件时,把日志记录从ERROR降到WARNING级别。

Filter在logger和handler中都可以添加,多个Filter可以链接起来使用,来做多重过滤操作。

1.4 Formatters

日志记录最终是需要以文本来呈现的,Formatter描述了文本的格式,一个Formatter通过包含 LogRecord attributes 的Python格式化字符串组成,不过你也可以为特定的格式来配置自定义的Formatter。

2.在Django视图中使用logging

在代码文件中引入logging模块,即可发起对应的调用。

复制代码
from django.shortcuts import render
from django.http import HttpResponse
import logging
​
# logger实例创建
logger = logging.getLogger(__name__)
def index(request):
​
    # 记录日志信息
    logger.debug('debug日志')
    logger.info('info日志')
    logger.warning('warning日志')
    logger.error('error日志')
    return HttpResponse("Django 日志测试")

这里只是调用logging模块,并未配置相应handlers,默认在控制台输出debug级别以上的日志信息。

logger对象有以下几个内置方法:

  • logger.debug()

  • logger.info()

  • logger.warning()

  • logger.error()

  • logger.critical()

  • logger.exception():创建一个包含当前异常堆栈的ERROR级别日志消息。

3.在Django中配置logging

3.1 将日志输出到文件中

settings.py 文件中配置如下内容

复制代码
import os
​
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/path/to/django/debug.log',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

代码测试

3.2 将日志输出到控制台

settings.py 文件中配置如下内容

复制代码
import os
​
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'root': {
        'handlers': ['console'],
        'level': 'WARNING',
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
            'propagate': False,
        },
    },
}

代码测试

相关推荐
powerfulhell6 小时前
寒假python作业5
java·前端·python
铉铉这波能秀7 小时前
LeetCode Hot100 中 enumerate 函数的妙用(2026.2月版)
数据结构·python·算法·leetcode·职场和发展·开发
毕设源码-赖学姐7 小时前
【开题答辩全过程】以 基于python的电影推荐系统为例,包含答辩的问题和答案
开发语言·python
敲键盘的生活7 小时前
MoneyPrinter重构之一:用nicegui调用大模型生成视频文案
python·重构·aigc·ai编程·ai写作
小邓睡不饱耶7 小时前
2026 CSDN榜单封神!3大热门技术+5个大厂案例,新手也能直接抄作业
python·ai
南极星10057 小时前
我的创作纪念日--128天
java·python·opencv·职场和发展
码界筑梦坊7 小时前
327-基于Django的兰州空气质量大数据可视化分析系统
python·信息可视化·数据分析·django·毕业设计·数据可视化
Highcharts.js7 小时前
如何使用Highcharts SVG渲染器?
开发语言·javascript·python·svg·highcharts·渲染器
啊阿狸不会拉杆7 小时前
《机器学习导论》第 7 章-聚类
数据结构·人工智能·python·算法·机器学习·数据挖掘·聚类
摇滚侠7 小时前
Java,举例说明,函数式接口,函数式接口实现类,通过匿名内部类实现函数式接口,通过 Lambda 表达式实现函数式接口,演变的过程
java·开发语言·python