Django 日志配置按日期滚动的方法
本文介绍如何在 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 日志配置按日期滚动的方法分享,希望能提供有益参考。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









