前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何给django restframework配置日志记录

如何给django restframework配置日志记录

作者头像
用户1413827
发布2023-11-28 15:39:26
2370
发布2023-11-28 15:39:26
举报
文章被收录于专栏:站长运维站长运维

如何给django restframework配置日志记录

我首先按照官方的文档来配置,发现并没有生效,本来想logger.info()应该顺理成章就打印出日志到文件里了,但是发现没有生效。

最终追究产生原因,发现是对于MIDDLEWAREMIDDLEWARE_CLASSES理解有误,导致自己针对于前端vue项目使用这些接口,一直捕获不到日志,最终调整了中间件位置至MIDDLEWARE中,最终成功捕获日志。 <!–more–> 本文分为两部分,第一部分,讲怎么启用日志及开启写入文件方便追踪。第二部分,讲如何来实现中间件,让djangorestful接口package:django restframework的所有请求都可以被记录下来。

第一部分:如何开启日志支持

django项目的settings.py中先开启日志记录的功能。 注意:下面日志的目录,日志文件要提前创建好,否则可能导致项目启动不起来。

代码语言:javascript
复制
# LOGGING 设置信息
LOG_DIR = BASE_DIR + "/manage_log"

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
         'standard': {
            'format': '%(asctime)s FuncName:%(funcName)s LINE:%(lineno)d [%(levelname)s]- %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(funcName)s %(message)s'
        },
    },
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'root': {
        'handlers': ['console'],
        'level': 'DEBUG',
    },
    'handlers': {
        'sql': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': os.path.join(BASE_DIR, "sql_info.log"),
            'formatter': 'simple'
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'standard'
        },
        'default': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(LOG_DIR, 'info.log'),
            'maxBytes': 1024*1024*50,   # 50 MB
            'backupCount': 2,
            'formatter': 'standard',
        },
        'default_debug': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(LOG_DIR, 'debug.log'),
            'maxBytes': 1024*1024*50,  # 50 MB
            'backupCount': 2,
            'formatter': 'standard',
        },
        'request_handler': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(LOG_DIR, 'common.log'),
            'maxBytes': 1024*1024*50,  # 50 MB
            'backupCount': 2,
            'formatter': 'standard',
        },
        'restful_api': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': os.path.join(LOG_DIR, 'api.log'),
            'maxBytes': 1024*1024*50,  # 50 MB
            'backupCount': 2,
            'formatter': 'verbose',
        },

    },
    'loggers': {
        'django': {
            'handlers': ['console', 'default_debug'],
            'level': 'INFO',
            'propagate': False
        },
        'django.request': {
            'handlers': ['request_handler'],
            'level': 'INFO',
            'propagate': False
        },
        'common': {
            'handlers': ['default', 'console'],
            'level': 'INFO',
            'propagate': True
        },
        'api': {
            'handlers': ['restful_api'],
            'level': 'INFO',
            'propagate': True
        },
        'django.db.backends': {
            'handlers': ['console','sql'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}

第二部分:如何创建一个可以记录django restframework请求相关的全链录日志

  1. 创建项目目录下供相应应用使用的中间件

python manage.py startproject xx这个命令,如果你从头到尾创建过相应的项目,你肯定不陌生,注意这里创建的是项目,不是应用,注意与python manage.py startapp xx这个创建应用的命令区分开。可以理解成一个项目下面可以创建很多个应用,在这种状况下,由于我们准备创建这个中间件,只给我供C端用户使用的客户技术栈项目vue来使用,所以,我针对这个应用创建中间件就可以了。

  • 1.1 在某应用目录下新建middleware.py文件,文件内容如下。
代码语言:javascript
复制
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import logging
import json


class ApiLoggingMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response
        self.apiLogger = logging.getLogger('api')

    def __call__(self, request):
        try:
            body = json.loads(request.body)
        except Exception:
            body = dict()
        body.update(dict(request.POST))
        response = self.get_response(request)
        self.apiLogger.info("{} {} {} {} {} {} {}".format(
            request.user, request.method, request.path, body,
            response.status_code, response.reason_phrase, str(response.content)))
        return response
  1. 在项目配置文件settings.py(上面已经提到过了)做如下的配置
  • 2.1 配置文件的MIDDLEWARE部分引入创建好的中间件

添加的配置选项

这样就可以正常查看日志了。

所生成的日志记录文件

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何给django restframework配置日志记录
    • 第一部分:如何开启日志支持
      • 第二部分:如何创建一个可以记录django restframework请求相关的全链录日志
      相关产品与服务
      消息队列 TDMQ
      消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档