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 外键操作(转载)

    2017年09月21日 22:25:59 MonCheri_Flowers 阅读数 1170     看了这篇文章,觉得例子说的很好     我先定义两个模型,一个是作者,一个是作者出版的书籍,算是一对多的类型。 class Person(models.Model); name = models.CharField(‘作者姓名’, max_length=10…

    Django 2023年4月13日
    00
  • Django QueryDict对象详解

    QueryDict是Django中处理查询字符串的对象,它继承自字典对象,提供了一些方法来处理带有重复键的查询字符串。在本文中,我们将详细介绍QueryDict对象的属性和方法,以及如何使用它来处理查询字符串。 创建QueryDict对象 在Django中,QueryDict对象可以通过访问HttpRequest对象的属性来创建,例如,如果我们有一个GET请…

    Django 2023年3月12日
    00
  • django过滤器,日期格式化

    过滤器相关: 一、形式:小写{{ name | lower }} 二、串联:先转义文本到HTML,再转换每行到   标签{{ my_text|escape|linebreaks }} 三、过滤器的参数显示前30个字{{ bio | truncatewords:”30″ }} 格式化{{ pub_date | date:”F j, Y” }} 过滤器列表{{ …

    Django 2023年4月13日
    00
  • python如何配置virtualenv虚拟环境,启动两个django环境

      1.安装virtualenv pip3 install virtualenvpip install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenvpip3 install –upgrade pip 2.创建目录 mkdir Myproject cd Myproject 3.创建独立运行环境-…

    Django 2023年4月11日
    00
  • [django]模板中自定义变量&django模板中的变量

    django自定义模板变量 context_processors.py def mysetings(request): return { ‘NAME’: ‘maotai’ } settings.py TEMPLATES = [ { ‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’, ‘D…

    Django 2023年4月10日
    00
  • python Django的显示个人信息详解

    关于“python Django的显示个人信息详解”的攻略,我整理了以下流程,也包含两条示例说明。 1. 创建模型 在 Django 中,我们需要先创建一个模型,即个人信息的数据库模型。通过以下几个步骤可以实现: 1.1 在已有的 Django 项目中创建一个 app(如果还没有 app,可以先创建一个 app) python manage.py start…

    Django 2023年5月16日
    00
  • settings.py配置文件是什么?

    Django是一个高效的Web框架,可以轻松地搭建一个功能完善的Web应用程序,而其强大灵活的配置可以借助于settings.py文件实现。 设置调整 Django的settings.py文件包含一系列的配置选项,这些选项可以根据开发需求进行相应的调整和配置。这些选项包括但不限于以下内容: DEBUG:这是一个布尔值,表示是否启用调试模式。在调试模式下,Dj…

    Django 2023年3月12日
    00
  • Django+Vue打造购物网站(四)

    首页商品类别数据显示 商品分类接口 大概需要两个,一个显示三个类别 一个显示类别及类别下的全部商品 现在开始写商品的接口首先编写三个分类的serializer class CategorySerializer3(serializers.ModelSerializer): ”’ 三级分类 ”’ class Meta: model = GoodsCatego…

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