Django日志输出

本文介绍如何在Django中使用Python标准库logging模块记录日志。详细解释了配置中的Logger、Handler、Formatter和Filter组件,并提供了示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django 中使用 logging进行日志输出

logging 模块简介

logging 是 python 标准库中的模块,用于记录 log。

主要包括以下四个组件:

  • Loggers 向应用程序提供log接口
  • Handlers 将log记录发送到指定的目的地(控制台输出,或写入文件或发向网络等等)
  • Filters 提供一个分级策略控制 log 输出等级
  • Formatters 指定输出的最终格式

在D jango 中使用

Django 中使用 logging 模块记录log,如果要使用它,方法很简单,就是在 settings 中通过变量 LOGGING,LOGGING 是一个字典,典型的配置如下:

LOGGING = {
    'version': 1,#指明dictConnfig的版本,目前就只有一个版本,哈哈
    'disable_existing_loggers': True,#禁用所有的已经存在的日志配置
    '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,别名special,可以接受其他的参数
            '()': 'project.logging.SpecialFilter',
            'foo': 'bar',#参数,名为foo,值为bar
        }
    },
    'handlers': {#处理器,在这里定义了三个处理器
        'null': {#Null处理器,所有高于(包括)debug的消息会被传到/dev/null
            'level':'DEBUG',
            'class':'django.utils.log.NullHandler',
        },
        'console':{#流处理器,所有的高于(包括)debug的消息会被传到stderr,使用的是simple格式器
            'level':'DEBUG',
            'class':'logging.StreamHandler',
            'formatter': 'simple'
        },
        'mail_admins': {#AdminEmail处理器,所有高于(包括)而error的消息会被发送给站点管理员,使用的是special格式器
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler',
            'filters': ['special']
        }
    },
    'loggers': {#定义了三个记录器
        'django': {#使用null处理器,所有高于(包括)info的消息会被发往null处理器,向父层次传递信息
            'handlers':['null'],
            'propagate': True,
            'level':'INFO',
        },
        'django.request': {#所有高于(包括)error的消息会被发往mail_admins处理器,消息不向父层次发送
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': False,
        },
        'myproject.custom': {#所有高于(包括)info的消息同时会被发往console和mail_admins处理器,使用special过滤器
            'handlers': ['console', 'mail_admins'],
            'level': 'INFO',
            'filters': ['special']
        }
    }
}

一个记录器是日志系统的一个实体,每一个记录器是一个已经命名好的可以将消息为进程写入的“桶”。
每一个记录器都会有一个日志等级,每个等级描述了记录器即将处理的信息的严重性,python定义了以下五个等级:

  • debug:出于调试目的的低层次系统信息
  • info:普通的系统信息列表内容
  • warning:描述已经发生的小问题
  • error:描述已经发生的主要问题
  • critical:描述已经发生的严重问题

然后在需要输出日志的地方,输出如下代码:

import logging
# logging.getLogger()的调用获得一个记录器的实体,记录器实体通过名字来辨别。一般参数填写记录器的python模块的名字,#这使得基于每个模块的记录成为可能或者你可以是用点号相连的名字,这意味着记录器的层次,点号之前的是点号之后的父模块。
logger = logging.getLogger(“prj.app.file”) 
logger.info('123')
logger.error('error')
logger.warning('warning')
Django日志配置可以在 settings.py 文件中进行配置,具体步骤如下: 1. 导入 logging 模块: ```python import logging ``` 2. 配置日志的格式: ```python LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'class': 'logging.StreamHandler', }, 'file': { 'class': 'logging.handlers.RotatingFileHandler', 'filename': 'django.log', 'maxBytes': 1024 * 1024 * 5, # 5 MB 'backupCount': 5, }, }, 'loggers': { 'django': { 'handlers': ['console', 'file'], 'level': 'DEBUG', }, }, } ``` 在上面的配置中,使用了一个 RotatingFileHandler,将日志输出到一个名为 django.log 的文件中。maxBytes 和 backupCount 参数用于控制日志文件的大小和数量。当日志文件大小超过 maxBytes 时,会自动创建一个新的日志文件,并将旧的日志文件备份到一个新的文件中。 3. 在代码中使用日志: ```python import logging logger = logging.getLogger('django') def my_view(request): logger.debug('This is a debug message') logger.info('This is an info message') logger.warning('This is a warning message') logger.error('This is an error message') logger.critical('This is a critical message') ``` 在上面的代码中,通过 getLogger 方法获取名为 django 的 Logger 对象,并使用其 debug、info、warning、error 和 critical 方法输出不同级别的日志信息。 注意:在上面的配置中,使用了一个名为 django 的 logger,这是 Django 默认使用的 logger。如果你想要使用一个不同的 logger,需要在配置中添加对应的 handlers 和 loggers。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值