Django日志模块logging的配置详解

季宁
季宁
发布时间:2026-10-13| 4人浏览过
原创

本文详解Django中logging模块的配置方法,涵盖Logger、Handler、Formatter和Filter四大核心组件的工作流程。通过解析settings中的LOGGING配置,介绍如何设置控制台、文件及邮件通知处理器,并强调开启SMTP服务及权限管理的重要性,帮助开发者实现安全的线上日志监控。

前言

Django内置的日志输出功能十分完善,涵盖了请求信息、Settings配置以及Traceback回溯信息等,足以满足日常调试需求。然而,在生产环境中,若将这些详细信息暴露给用户,将带来严重的安全隐患(如代码泄露)。因此,线上环境必须关闭Debug模式,但同时也不能丢弃这些宝贵的调试数据,这时就需要借助logging模块来实现安全且完整的日志记录。

logging模块本身属于Python标准库,但在Django框架中提供了丰富的本地化支持,使其更贴合Web开发场景。

理解Logger

要正确使用logging,首先需要理解其核心工作机制,主要涉及四个关键组件:格式器(Formatter)、过滤器(Filter)、处理器(Handler)以及日志实例(Logger)。

处理流程

   formatter
logger ----> handler ----------------> files, emails
    filter

具体的处理流程如下:在代码编写阶段,我们获取的是一个Logger实例,并通过该实例来记录日志信息。

# import the logging library
import logging
 
# Get an instance of a logger
logger = logging.getLogger('django')
 
def my_view(request, arg1, arg):
 ...
 if bad_mojo:
 # Log an error message
 logger.error('Something went wrong!')

随后,名为'django'的Logger会将接收到的日志信息传递给相应的Handler。Handler负责利用Formatter和Filter对日志进行格式化处理和内容过滤,最终将日志提交到目标介质中(如保存到文件、存入数据库或发送邮件)。

通常情况下,Handler可以是多种处理方式的组合,例如'send_email'用于发送邮件,'error_file'用于记录错误日志。在Logger配置中,Handler可以被复用。例如,我们的django Logger可能使用了'send_email'和'error_file'这两个处理器,而request Logger则使用'error_file'和'info_file'。由此可见,Logger与Handler之间是多对多的关系。

配置方式

在Python中,可以使用多种格式来配置logging,例如.conf或.ini文件。

在Django项目中,我们将logging相关的配置写入settings文件中。以下是相应的配置项及其解释(仅供参考):

#管理员邮箱
ADMINS = (
 ('laixintao','*******@163.com'),
)
 
#非空链接,却发生404错误,发送通知MANAGERS
SEND_BROKEN_LINK_EMAILS = True
MANAGERS = ADMINS
 
#Email设置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST= 'smtp.163.com'#QQ邮箱SMTP服务器(邮箱需要开通SMTP服务)
EMAIL_PORT= 25 #QQ邮箱SMTP服务端口
EMAIL_HOST_USER = '**********@163.com' #我的邮箱帐号
EMAIL_HOST_PASSWORD = '**************' #授权码
EMAIL_SUBJECT_PREFIX = 'website' #为邮件标题的前缀,默认是'[django]'
EMAIL_USE_TLS = True #开启安全链接
DEFAULT_FROM_EMAIL = SERVER_EMAIL = EMAIL_HOST_USER #设置发件人
 
#logging日志配置
LOGGING = {
 'version': 1,
 'disable_existing_loggers': True,
 'formatters': {#日志格式 
 'standard': {
  'format': '%(asctime)s [%(threadName)s:%(thread)d] [%(name)s:%(lineno)d] [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'} 
 },
 'filters': {#过滤器
 'require_debug_false': {
  '()': 'django.utils.log.RequireDebugFalse',
  }
 },
 'handlers': {#处理器
 'null': {
  'level': 'DEBUG',
  'class': 'logging.NullHandler',
 },
 'mail_admins': {#发送邮件通知管理员
  'level': 'ERROR',
  'class': 'django.utils.log.AdminEmailHandler',
  'filters': ['require_debug_false'],# 仅当 DEBUG = False 时才发送邮件
  'include_html': True,
 },
 'debug': {#记录到日志文件(需要创建对应的目录,否则会出错)
  'level':'DEBUG',
  'class':'logging.handlers.RotatingFileHandler',
  'filename': os.path.join(BASE_DIR, "log",'debug.log'),#日志输出文件
  'maxBytes':1024*1024*5,#文件大小 
  'backupCount': 5,#备份份数
  'formatter':'standard',#使用哪种formatters日志格式
 },
 'console':{#输出到控制台
  'level': 'DEBUG',
  'class': 'logging.StreamHandler',
  'formatter': 'standard',
 },
 },
 'loggers': {#logging管理器
 'django': {
  'handlers': ['console'],
  'level': 'DEBUG',
  'propagate': False 
 },
 'django.request': {
  'handlers': ['debug','mail_admins'],
  'level': 'ERROR',
  'propagate': True,
 },
 # 对于不在 ALLOWED_HOSTS 中的请求不发送报错邮件
 'django.security.DisallowedHost': {
  'handlers': ['null'],
  'propagate': False,
 },
 } 
}

上述配置文件中定义了三个日志处理器,分别如下:

  1. 1. 'django.request':当Django的Request发生错误时,会自动记录日志。随后,通过'debug'处理器将信息记录到文件中,并通过'mail_admins'将信息以邮件形式发送给管理员。邮件功能非常强大,它并非纯文本信息,而是生成了HTML格式的文件,内容与浏览器中看到的错误页面完全一致。要正常使用邮件功能,需参照上文配置发件人信息。例如,我直接使用了网易邮箱。需注意以下三点:第一,务必在邮件服务商处开启SMTP服务;第二,不同服务商可能有特殊设置,如网易会提供客户端授权码,这才是真正的密码,而非网页登录密码;第三,注意服务商对发信频率的限制。
  2. 2. 'django':使用console处理器,将日志信息输出到控制台。在开发阶段即可使用此处理器(相比print,这显得更专业)。
  3. 3. 最后一个处理器详见代码注释部分。

最后,务必确保日志文件路径具有相应的写入权限。例如,若使用Apache2服务器,需要赋予www-data用户写入权限:

sudo chown -R [yourname]:www-data [log]
sudo chmod -R g+s [log]

总结

以上就是本文的全部内容,希望这些内容能对各位的学习或工作有所帮助。如有任何疑问,欢迎留言交流。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。