Day084 django日志

django日志

1、概述

​ django框架的日志通过python内置的logging模块实现的,日记可以记录自定义的一些信息描述,也可以记录系统运行中的一些对象数据,还可以记录包括堆栈跟踪、错误代码之类的详细信息

​ logging主要由4部分组成:Loggers、Handlers、Filters和Formatters

2、settings中完整的配置

LOGGING = {
        
    # 固定值
    'version'1,
    # 格式器,详细见第6点
    'formatters': {},
    # 过滤器,详细见第5点
    'filters'{},
    # 处理器,详细见第4点
    'handlers':{},
    # 记录器,详细见第3点
    'loggers':{},
    # 根记录器,配置等同普通记录器,但是没有propagate配置项
    'root':{},
    # 默认为False。True:是将配置解释为现有配置的增量。False:配置会覆盖已有默认配置
    'incremental':True,
    # 默认为True。禁用任何现有的非root记录器。如果设置了incremental=True,则此配置无效
    'disable_existing_loggers': False
}

3、Loggers

​ 这个类是logging系统的入口

​ python定义了日志的5个级别,分别对应python程序中日志信息的不同严重性(严重程度从上到下越来越严重,也就是级别越高):

  • DEBUG:用于调试的最低级的系统信息
  • INFO:一般性的系统信息
  • WARNING:一些警告性的信息,发生了一些小问题,这些问题不影响系统的正常运行,但是也不建议出现
  • ERROR:系统出现错误了,该错误会影响系统的正常运行,记录错误相关的信息
  • CRITICAL:非常严重的问题,譬如可能引起系统崩溃的问题等

​ 在使用logger记录日志时,每条日志消息也有日志级别,当logger记录该日志消息时,会将消息的级别和logger配置的日志级别进行比较,只有消息的级别达到或超过logger配置的日志级别,才会将该日志消息传递给handler进一步处理,否则该日志消息会被忽略

​ PS:一般开发环境时,会启用DEBUG级别,而在生产环境中,启用WARNING或ERROR级别

1.settings中配置

通过在settings中配置LOGGING配置项实现日志配置,共4个配置项(都是可选的,不过一般会指定handler):

  • level:指定记录日志的级别,没有配置则处理所有级别的日志
  • propagate:设置该记录器的日志是否传播到父记录器,不设置则是True
  • filters:指定过滤器列表
  • handlers:指定处理器列表

示例如下:

LOGGING = {
        
    'version': 1,  # 固定值,现在只有这一个版本
    'disable_existing_loggers': False, # 设置已存在的logger不失效
    'loggers': {
        
        '': {
        
            'handlers': ['console'],
        },
        'django': {
        
            'handlers': ['console'],
            'propagate': True,
        },
        'django.request': {
        
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': False,
        },
        'myproject.custom': {
        
            'handlers': ['console', 'mail_admins'],
            'level': 'INFO',
            'filters': ['special']
        }
    }
}

说明:

配置了4个 logger, 分别对应2个不同的handler(console输出日志到控制台,mail_admins输出日志到邮件)

  • '':默认的记录器,不指定特定名称,那么就是使用这个记录器,没有配置level,那么就是处理所有级别的日志,传递所有级别的日志到console控制器
  • django:传递所有级别的日志到console控制器
  • django.request:django记录器的子记录器,处理ERROR级别及以上的日志,propagate设置为 False,表明不传播日志给 "django",该logger传递日志到mail_admins控制器
  • myproject.custom:处理INFO级别及以上的日志,应用了一个 special 的过滤器来过滤日志,传递日志到2个控制器(['console', 'mail_admins'])处理

​ django框架有个默认的配置:DEFAULT_LOGGING,一旦配置了自己的LOGGING后,那么所有的默认的LOGGER全部都失效,失效不等于没有记录器了,而是说记录器不起作用了,即不会记录日志,也不会将日志传播给父记录器。因此你应该非常小心使用,因为你会感觉你丢了日志一样,可以手动设置同名的logger实现覆盖,如:

LOGGING = {
        
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        
        'file': {
        
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/path/to/django/debug.log',
        },
    },
    'loggers': {
        
        #  覆盖了 django 记录器,所有django的记录日志最后全部写入到文件中
        'django': {
        
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

​ disable_existing_loggers默认是True,除非设置disable_existing_loggers为False,那么默认配置的记录器才会起作用

LOGGING = {
        
    'disable_existing_loggers': False,
}

​ 配置还可以使用系统变量,如下示例中读取 DJANGO_LOG_LEVEL 环境变量:

import os

LOGGING = {
        
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        
        'console': {
        
            'class'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值