Django Logging

Posted lfdblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django Logging相关的知识,希望对你有一定的参考价值。

Django Logging

组成部分

  Loggers

  Handlers

  Filters

  Formatters

Loggers

  loggers是记录系统的入口。他具有日志级别,定义的日志级别如下

    DEBUG:用于调试目的的低级系统信息

    INFO: 一般系统信息

    WARNING: 警告信息

    ERROR:错误信息

    CRITICAL:关键错误信息

    NOTEST: 记录所有

  写入logger的每条消息都是日志记录。每个日志记录还具有一个日志级别,表示该消息的严重性。日志记录还可以包含描述正在记录会见的有用元数据。这可以包括诸如堆栈跟踪或错误代码之类的详细信息。

  如果消息日志级别达到或超过loggers本身的日志级别,则进行下一步处理,如果没有,则忽略。

  一旦记录器确定需要处理消息,他就会传递给Handler。

Handler

  Handler是负责进行处理。例如将消息写入屏幕,文件或者socket。

  Handler也具有日志级别,如果未达到Handeler的日志级别,则忽略

  loggers可以有多个Handler,可以定义不同的日志级别。

Filters

  Filters用于提供对从loggers到Handler的日志记录传递的额外控制。

  默认情况下,处理所有满足日志级别要求的任何日志消息。也可以自定义其他条件

Formatters

  格式化输出。格式化程序通常由包含LogRecord属性的Python格式化字符串组成

配置日志记录

  默认情况下Django使用dictConfig格式,配置日志记录。

  参考网址

    https://docs.python.org/3/library/logging.handlers.html

  dictConfig必填

    version 目前唯一有效的值为1

   其他都是可选的

  如果dictConfig中disable_existing_loggersLOGGING设置为True(默认值),则将禁用默认配置中的所有记录器。已禁用的记录器与已删除的记录器不同; 记录器仍然存在,但会默默地丢弃记录到它的任何内容,甚至不会将条目传播到父记录器。因此你应该非常小心使用它可能不是你想要的。相反,您可以设置和重新定义的部分或全部的默认记录器; 或者您可以设置 处理日志记录配置己‘disable_existing_loggers‘: Truedisable_existing_loggersFalseLOGGING_CONFIGNone

  示例文件

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,
        },
    },
}

   

logging.FileHandler 发送日志输出到磁盘文件
logging.StreamHandler  发送日志输出sys.stdout的sys.stderr或任何类文件对象
logging.NullHandler  不做任何输出
propagate 向上级传递
logging.handlers.RotatingFileHandler 根据日志大小进行日志轮询


代码中打印日志
import logging
logger = logging.getLogger("django")
logger.info("hello word!")

 



 

 

 

 打印日志输出到屏幕

import os

LOGGING = {
    version: 1,
    disable_existing_loggers: False,
    handlers: {
        console: {
            class: logging.StreamHandler,
        },
    },
    loggers: {
        django: {
            handlers: [console],
            level: os.getenv(DJANGO_LOG_LEVEL, INFO),
        },
    },
}

 

复杂的日志格式

LOGGING = {
    version: 1,
    disable_existing_loggers: False,
    formatters: {
        verbose: {
            format: %(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s
        },
        simple: {
            format: %(levelname)s %(message)s
        },
    },
    filters: {
        special: {
            (): project.logging.SpecialFilter,
            foo: bar,
        },
        require_debug_true: {
            (): django.utils.log.RequireDebugTrue,
        },
    },
    handlers: {
        console: {
            level: INFO,
            filters: [require_debug_true],
            class: logging.StreamHandler,
            formatter: simple
        },
        mail_admins: {
            level: ERROR,
            class: django.utils.log.AdminEmailHandler,
            filters: [special]
        }
    },
    loggers: {
        django: {
            handlers: [console],
            propagate: True,
        },
        django.request: {
            handlers: [mail_admins],
            level: ERROR,
            propagate: False,
        },
        myproject.custom: {
            handlers: [console, mail_admins],
            level: INFO,
            filters: [special]
        }
    }
}

 

  

  







以上是关于Django Logging的主要内容,如果未能解决你的问题,请参考以下文章

django-logging

django-logging

如何在 Django Summernote 中显示编程片段的代码块?

Django中Logging日志配置

Django日志配置代码

Django日志配置代码