Django日志logging的配置和自定义添加方式

下面我将为您详细讲解Django日志logging的配置和自定义添加方式。

配置Django日志logging

Django使用logging模块来记录日志,默认情况下,它会输出到控制台中。我们可以通过在settings.py文件中配置logging设置来自定义日志记录方式。

先看一下一个标准的logging配置示例,如下所示:

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'verbose': {
                'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
            },
            'simple': {
                'format': '%(levelname)s %(message)s'
            },
        },
        'handlers': {
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
                'formatter': 'verbose'
            },
            'file': {
                'level': 'DEBUG',
                'class': 'logging.FileHandler',
                'filename': os.path.join(BASE_DIR, 'django.log'),
                'formatter': 'verbose'
            },
        },
        'loggers': {
            'django': {
                'handlers': ['console', 'file'],
                'level': 'DEBUG',
                'propagate': True,
            },
        },
    }

其中,LOGGING设置包含三个主要部分:'formatters'、'handlers'、'loggers'。

formatters

'formatters' 用于格式化输出日志内容的样式。Django默认配置两种样式:'verbose'和'simple'。
- 'verbose' 样式包括了大量日志的详细信息,如日志级别、时间、模块、进程和线程信息;
- 'simple' 样式只包含了日志级别和具体的日志信息。

handlers

'handlers' 用于定义日志处理器,Django默认配置两种处理器:'StreamHandler'和'FileHandler'。
- 'StreamHandler' 处理器将日志信息输出到控制台;
- 'FileHandler' 处理器将日志信息输出到文件。

loggers

'loggers' 用于定义日志处理方式,包括日志级别和处理器。通常情况下,我们定义一个名为'django'的默认日志处理器,并列出所有的处理器;也就是说,我们在默认情况下将所有的日志都记录到控制台和指定的文件中。

自定义添加Django日志logging方式

除了使用默认的日志设置,Django也支持自定义添加日志方式。

以下是一个自定义添加Django日志logging方式的示例,其中包含两种添加方式示例。

方式1:在views中添加日志

    import logging
    import json

    logger = logging.getLogger(__name__)

    def test(request):
        logger.warning(json.dumps({'message': 'test log'}))
        return HttpResponse("test logging")

以上示例中,我们使用了Python中内置的logging模块记录日志,首先需要 import logging模块,然后获取一个特定的logger对象。这个logger对象的名称是当前模块的名称,即__name__值。然后使用logger对象来记录日志,可使用debug()、info()、warning()、 error()、critical()五种方法中的任何一种。在此示例中,我们使用了warning方法。

方式2:在middleware中添加日志

    import logging
    import time

    logger = logging.getLogger(__name__)

    class LoggingMiddleware(object):

        def process_request(self, request):
            self.start_time = time.time()
            return None

        def process_response(self, request, response):
            elapsed_time = time.time() - self.start_time
            content = response.content
            content = content.decode('utf-8')
            if response.status_code == 200 and len(content) < 1000:
                logger.info("{time:.5f}s \n{content}".format(content=content, time=elapsed_time))
            else:
                logger.warning("{method} {url} {status_code} {time:.5f}s".format(
                    method = request.method,
                    url = request.build_absolute_uri(),
                    status_code = response.status_code,
                    time = elapsed_time,
                ))
            return response

以上示例中,我们新建了一个middleware LoggingMiddleware,在此类中重写了process_request和process_response方法。它可以捕获所有的请求和响应,用函数计算并记录耗时,并将响应内容写入日志文件或输出到控制台。

总结

以上就是Django日志logging的配置和自定义添加方式的详细攻略。配置logging,可以帮助我们记录、追踪和排除应用程序运行中出现的各种问题,并定制各自的日志信息输出方式。添加自定义日志方式,可以实现更加灵活、强大的日志记录功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django日志logging的配置和自定义添加方式 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • django—路由层

    Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。 你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。 URLconf配置 基本格式: from django.conf.urls import u…

    Django 2023年4月11日
    00
  • Django框架设置cookies与获取cookies操作详解

    下面我为您详细讲解“Django框架设置cookies与获取cookies操作详解”的完整攻略,包含两条示例说明。 1. 设置Cookies 在Django框架中设置cookie非常简单,只需要使用response对象的set_cookie方法即可。set_cookie方法有四个参数,分别为:key、value、max_age和expires。其中,key和…

    Django 2023年5月16日
    00
  • Django路由系统-URL命名&URL反向解析

    前言 起始样式,HTML中的href是写死的,不能更改,如下示例代码: # urls中 urlpatterns = [ url(r’^admin/’, admin.site.urls), url(r’^jjzz/$’, views.JJzz.as_view()), url(r’^jjzz_index/$’, views.Index.as_view()), u…

    Django 2023年4月9日
    00
  • Django 自定义存储上传文件的文件名

    一、需求: Django实现自定义文件名存储文件 使文件名看起来统一 避免收到中文文件导致传输、存储等问题 相同的文件也需要使用不同的文件名 二、实现思路: 思路: 生成14位随机字母加数字、后10位采用时间戳。从而实现相同文件不同文件名 1.view版: 在view接收到文件名之后进行重命名,不修改Django默认的文件存储逻辑。从而实现需求 2.uplo…

    Django 2023年4月11日
    00
  • django 删除数据库表后重新同步的方法

      python manage.py sqlmigrate your_app_name 0001 把your_app_name换成自己的app名字即可看到框架自动生成的创建表sql语句,于是我就这样看到了sql语句。我直接在数据库中执行了该句sql命令手动创建了表,再启动应用,可以正常启动,问题解决。 D:\PycharmProjects\autotest&…

    Django 2023年4月9日
    00
  • Django小项目web聊天

    WEBQQ的实现的几种方式 1、HTTP协议特点 首先这里要知道HTTP协议的特点:短链接、无状态! 在不考虑本地缓存的情况举例来说:咱们在连接博客园的时候,当tcp连接后,我会把我自己的http头发给博客园服务器,服务器端就会看到我请求的URL,server端就会根据URL分发到相应的视图处理(Django的views里)。最后给我返回这个页面,当返回之后…

    Django 2023年4月13日
    00
  • 『Django』第N+1节: Django自带的认证系统 – auth

    个人网站: lipeiguan.top以后会慢慢转移到个人网站, 欢迎大家收藏^ . ^ 写在前面 我们在开发一个网站的时候, 经常需要实现网站的用户系统. 这个时候我们需要实现用户注册、用户登录、用户认证、注销、修改密码等一系列功能. 如果我们都是自己实现的话, 不是不可以, 只是有些浪费时间.而Django则内置了一个用户认证系统 –> auth…

    Django 2023年4月10日
    00
  • Django+Vue打造购物网站(三)

    商品列表页 通过商品列表页面来学习drf django的view实现商品列表页 在goods目录下新建一个views_base.py文件,用来区分drf的view和Dajngo自带的view的区别利用Django的view实现返回json数据 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 20…

    2023年4月9日
    00
合作推广
合作推广
分享本页
返回顶部