Django 4.x Logging 日志使用示例和配置方法

Django使用 Python 内置的 logging 模块实现它自己的日志系统。其中主要包含四个模块:

  • Loggers(记录器):接受日志输出。
  • Handlers(处理器):设置日志输出目的地(标准输出、文件、邮件等)。
  • Filters(过滤器):与日志级别分开设置一个带有布尔函数的过滤器。
  • Formatters(格式化器):设置要输出到日志的字符串的格式。


在日志记录中,单个日志称为日志记录,日志记录根据其重要性有 7 个级别的日志级别。

名称

设定值

记录范围

NOTSET

0

设定值的记录(所有记录)

DEBUG

10

操作检查等调试记录

INFO

20

正常运行记录

WARNING

30

警告记录

ERROR

40

错误等严重问题

CRITICAL

50

停止等致命问题

如果在代码中指定任意一个logger,执行与日志级别同名的方法,就会输出日志。

import logging
…
logger = logging.getLogger('开发')
logger.info('Hello Python World!')



默认配置

Django 的默认日志记录。 这会在每个站点向站点管理员发送一封电子邮件HTTP 500 错误。

根据 DEBUG,所有其他日志记录要么发送到控制台 (DEBUG=True) 或丢弃 (DEBUG=False) 通过 require_debug_true 过滤器。

DEFAULT_LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'formatters': {
        'django.server': {
            '()': 'django.utils.log.ServerFormatter',
            'format': '[%(server_time)s] %(message)s a',
        }
    },
    'handlers': {
        'console': {
            'level': 'INFO',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
        },
        'django.server': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'django.server',
        },
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django': {
            'handlers': ['console', 'mail_admins'],
            'level': 'INFO',
        },
        'django.server': {
            'handlers': ['django.server'],
            'level': 'INFO',
            'propagate': False,
        },
    }
}
  • Loggers(记录器):称为 django 和 django.server 的 Logger。django是整体内部处理,django.server是开发web服务器访问日志的输出。
  • Handlers(处理器):调试时发送标准输出,生产操作时发送ERROR或更高的设置给管理员。每次发生“500 内部服务器错误”时都会发送一封电子邮件(如果设置了 SMTP 和管理员电子邮件地址)。
  • Filters(过滤器):可以使用使用 DEBUG 设置 ON/OFF 的过滤器。

logging 参数说明

LOGGING

包含配置信息的数据结构。该数据结构的内容将作为参数传递给中描述的配置方法 LOGGING_CONFIG。

LOGGING = {}

将日志保存到文件中。

settings.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/django_menu/debug.log',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

# 将日志打印到控制台
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,
        },
    },
}

views.py

import logging
logger = logging.getLogger(__name__) # 获取一个logger对象

def my_view(request, arg1, arg):
    ...
    if bad_mojo:
        logger.debug('记录一个调试信息') 
        logger.info('记录一个正常信息')
        logger.warning('记录一个警告信息')
        logger.error('记录一个错误信息')
        logger.critical('记录一个严重系统错误信息')

LOGGING_CONFIG

设置LOGGING_CONFIG为None,将跳过日志记录配置过程。

LOGGING_CONFIG = 'logging.config.dictConfig'


发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章