Django 日志配置按日期滚动的方法

Ryan
Ryan
发布时间:2026-10-13 | 6人浏览过
原创

本文介绍如何在 Django 项目中配置日志按日期自动滚动切割。通过修改 settings.py 中的 LOGGING 字典,使用 TimedRotatingFileHandler 指定文件名、滚动周期(如 midnight)及保留份数。文章涵盖环境准备、项目创建、视图编写及 URL 配置,并解决标准 logging 模块与 Django 日志系统的兼容问题,确保日志文件按天生成。

本文记录 Django 日志的配置方法,重点讲解如何实现基于日期的日志滚动切割功能。

相关配置源码托管于 GitHub,地址为 https://github.com/blackmatrix7/django-examples/tree/master/django_logs。

准备工作

运行环境

Python 3.5.2

Django 2.0.5

创建项目

使用命令行工具快速构建 Django 项目,示例中项目命名为 proj。

实施步骤

修改配置文件

日志部分配置参考 Django 官方文档。

官方文档链接:https://docs.djangoproject.com/en/2.0/topics/logging/#examples

LOGGING 配置项本质上是一个 dictConfig 结构。

关于 dictConfig 的具体配置规范,请参考 Python 官方手册。

官方手册链接:https://docs.python.org/3/library/logging.config.html#logging-config-dictschema

LOGGING = {
 'version': 1,
 'disable_existing_loggers': False,
 'formatters': {
  'verbose': {
   'format': '[%(asctime)s] [%(levelname)s] %(message)s'
  },
 },
 'handlers': {
  # 输出日志的控制台
  'console': {
   'level': 'INFO',
   'class': 'logging.StreamHandler',
   'formatter': 'verbose'
  },
  # 输出日志到文件,按日期滚动
  'file': {
   'level': 'DEBUG',
   'class': 'logging.handlers.TimedRotatingFileHandler',
   # TimedRotatingFileHandler的参数
   # 参照https://docs.python.org/3/library/logging.handlers.html#timedrotatingfilehandler
   # 目前设定每天一个日志文件
   'filename': 'logs/manage.log',
   'when': 'midnight',
   'interval': 1,
   'backupCount': 100,
   'formatter': 'verbose'
  },
  # 发送邮件,目前腾讯云、阿里云的服务器对外发送邮件都有限制,暂时不使用
  'email': {
   'level': 'ERROR',
   'class': 'django.utils.log.AdminEmailHandler',
   'include_html': True,
  }
 },
 'loggers': {
  # 不同的logger
  'django': {
   'handlers': ['console', 'file'],
   'level': 'INFO',
   'propagate': True,
  },
 },
}

创建 logs 目录。

cd django_logs/
mkdir logs

新增文件 django_logs/logger.py。

import logging
logger = logging.getLogger('django')

验证配置

创建应用。

python manage.py startapp app

编写视图函数。

定义一个视图函数,利用 logger 对象向日志文件中写入日志内容。

文件路径:django_logs/app/views.py

from logger import logger
from django.shortcuts import HttpResponse

def test_logger(request):
 logger.info('test log')
 return HttpResponse('test log')

配置 URL 路由。

文件路径:django_logs/proj/urls.py

from app import views
from django.contrib import admin
from django.urls import path

urlpatterns = [
 path('admin/', admin.site.urls),
 path('test_log/', views.test_logger),
]

调用测试

访问 http://127.0.0.1:8000/test_log/,确认 logs/manage.log 中成功写入日志。

[2018-05-18 08:35:44,317] [INFO] test log
[2018-05-18 08:35:44,318] [INFO] "GET /test_log/ HTTP/1.1" 200 8

最后,修改系统日期,观察日志文件是否按天进行分割。

上述日志写入仅对创建的 logger 对象有效。若需使用 logging 模块直接写入日志,需进行额外修改:使 logging 模块采用 Django 的 dictConfig 配置。

import logging.config
from django.conf import settings

logger = logging.getLogger('django')
logging.config.dictConfig(settings.LOGGING)

以上即为 Django 日志配置按日期滚动的方法分享,希望能提供有益参考。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表