Django logging配置及使用详解

yizhihongxing

下面我将为你详细讲解“Django logging配置及使用详解”的完整攻略。

一、概述

Django是一个功能强大的Web框架,应用广泛,但在实际项目中,我们经常需要记录一些日志来帮助我们定位问题、排查故障。Django提供了一个logging模块来方便我们记录日志。

本文将详细介绍Django中logging的配置与使用。

二、系统默认日志配置

在Django中,默认情况下会自动配置一些基本的日志记录,其配置如下:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'root': {
        'handlers': ['console'],
        'level': 'INFO',
    }
}

上述配置表示:

  1. version:表示日志配置的版本,目前为1。
  2. disable_existing_loggers:表示是否禁用所有已经存在的logger,默认为False。
  3. handlers:表示配置handler,即日志处理器,这里仅配置了一个console处理器,用来将日志输出到控制台。
  4. root:表示配置根logger,即所有日志都会经过这个logger处理,这里配置了一个console的handler,并设置了INFO级别,即只记录INFO级别及以上的日志。

事实上,Django还提供了其他几个handler,包括:

  1. logging.FileHandler:用来记录到文件。
  2. logging.handlers.RotatingFileHandler:用来循环记录到多个文件。
  3. logging.handlers.TimedRotatingFileHandler:用来定时记录到多个文件。

三、自定义日志配置及使用

如果我们需要定制化日志记录,或者需要使用其他日志处理器,那么我们可以在Django的配置文件中添加自定义日志配置,具体可以按以下步骤进行操作:

1. 在Django的配置文件中添加自定义日志配置

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'level': 'DEBUG', # 设置handler级别为DEBUG
        },
        'file': {
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': '/var/log/django.log',
            'maxBytes': 1024*1024*5, # 设置每个日志文件的最大大小为5M
            'backupCount': 7, # 设置备份数量为7个
            'level': 'INFO',
            'formatter': 'verbose'
        }
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'INFO',
            'propagate': True,
        },
        'myapp': {
            'handlers': ['console', 'file'], # 定义两个handler
            'level': 'DEBUG',
            'propagate': True,
        }
    },
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
}

上述配置表示:

  1. version:表示日志配置的版本,目前为1。
  2. disable_existing_loggers:表示是否禁用所有已经存在的logger,默认为False。
  3. handlers:表示配置handler,即日志处理器,这里定义了consolefile两个处理器。
  4. console处理器配置了StreamHandler,用来将日志输出到控制台,并设置了DEBUG级别。
  5. file处理器配置了RotatingFileHandler,用来循环记录到多个文件,并设置了INFO级别。同时定义了一个verbose格式化器。
  6. loggers:表示配置logger,即日志记录器。这里定义了两个logger,分别是djangomyapp
  7. django logger使用了file处理器进行日志记录,设置了INFO级别,并且设置了propagate为True,表示日志会继续传递给父logger进行处理。
  8. myapp logger使用了consolefile两个处理器进行记录,设置了DEBUG级别,并且设置了propagate为True,表示日志会继续传递给父logger进行处理。
  9. formatters:表示定义格式化器,这里定义了verbosesimple两种格式化器。

2. 在代码中使用日志记录器

在代码中使用日志记录器非常简单,只需要在需要记录日志的地方调用相应的函数即可。

import logging

logger = logging.getLogger('myapp')

def my_view(request, arg1, arg):
    logger.debug('Debug message')
    logger.info('Info message')
    logger.warning('Warn message')
    logger.error('Error message')
    logger.critical('Critical message')
    # ...

上述代码表示,在my_view方法中调用logger记录日志,按照日志级别从低到高,分别记录了调试信息、普通信息、警告信息、错误信息和严重错误信息。

四、示例说明

示例一

下面给出一个完整的示例,假设我们有一个Django项目的目录结构如下:

project/
    __init__.py
    settings.py
    urls.py
    wsgi.py
    myapp/
        __init__.py
        views.py

我们需要在views.py文件中进行日志记录,记录的日志需要输到文件中,以及在控制台打印出来。

首先,在settings.py中添加以下自定义日志配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'level': 'DEBUG', # 设置handler级别为DEBUG
        },
        'file': {
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': '/var/log/django.log',
            'maxBytes': 1024*1024*5, # 设置每个日志文件的最大大小为5M
            'backupCount': 7, # 设置备份数量为7个
            'level': 'INFO',
            'formatter': 'verbose'
        }
    },
    'loggers': {
        'myapp': {
            'handlers': ['console', 'file'], # 定义两个handler
            'level': 'DEBUG',
            'propagate': True,
        }
    },
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
}

然后,在views.py文件中添加以下代码:

import logging

logger = logging.getLogger('myapp')

def my_view(request, arg1, arg):
    logger.debug('Debug message')
    logger.info('Info message')
    logger.warning('Warn message')
    logger.error('Error message')
    logger.critical('Critical message')

上述代码表示,我们在my_view中调用logger记录日志,根据日志级别记录了不同级别的日志信息。

最后,在控制台运行Django项目,可以看到输出了日志信息,并且在/var/log/django.log文件中也记录了日志信息。

示例二

假设我们需要将日志信息记录到不同的文件中,根据不同的日志级别分别记录,在views.py文件中根据不同的情况进行日志记录。

首先,在settings.py中添加以下自定义日志配置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'level': 'DEBUG', # 设置handler级别为DEBUG
        },
        'info_file': {
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': '/var/log/django-info.log',
            'maxBytes': 1024*1024*5, # 设置每个日志文件的最大大小为5M
            'backupCount': 7, # 设置备份数量为7个
            'level': 'INFO',
            'formatter': 'verbose'
        },
        'error_file': {
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': '/var/log/django-error.log',
            'maxBytes': 1024*1024*5, # 设置每个日志文件的最大大小为5M
            'backupCount': 7, # 设置备份数量为7个
            'level': 'ERROR',
            'formatter': 'verbose'
        }
    },
    'loggers': {
        'myapp': {
            'handlers': ['console', 'info_file', 'error_file'],
            'level': 'DEBUG',
            'propagate': True,
        }
    },
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        }
    },
}

上述代码定义了三个handler,分别是consoleinfo_fileerror_file,其中info_fileerror_file使用了RotatingFileHandler,分别记录了INFO级别及以上和ERROR级别及以上的日志信息,同时使用了verbose格式化器。

然后,在views.py中添加如下代码:

import logging

logger = logging.getLogger('myapp')

def my_view(request, arg1, arg):
    if arg1 == 'info':
        logger.info('Info message')
    elif arg1 == 'error':
        logger.error('Error message')
    else:
        logger.debug('Debug message')

上述代码表示,根据参数arg1的值进行相应的日志记录,如果值为info,记录INFO级别的日志信息,如果值为error,记录ERROR级别的日志信息,否则记录DEBUG级别的日志信息。

最后,在控制台运行Django项目,可以看到输出了日志信息,并且在/var/log/django-info.log文件中和/var/log/django-error.log文件中分别记录了不同级别的日志信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django logging配置及使用详解 - Python技术站

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

相关文章

  • Django通用视图APIView和视图集ViewSet的介绍和使用(Django编程-1)

    1.APIView DRF框架的视图的基类是 APIViewAPIView的基本使用和View类似 Django默认的View请求对象是 HttpRequest,REST framework 的请求对象是 Request。Request对象的数据是自动根据前端发送数据的格式进行解析之后的结果。HttpRequest.GET ————> Request.…

    Django 2023年4月11日
    00
  • Django如何将自己的网站让其他主机访问

    ##第一点: 需要在你的setting.py文件中将按照如下设置: ALLOWED_HOSTS = [‘127.0.0.1’, ‘192.168.1.102’] 192.168.1.102是Django所在机器的IP  (此段验证未成功:或者在中括号中加入你在局域网中的IP。如我在局域网中的IP为192.168.10.133 所以设置ALLOWED_HOST…

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

    配置后台管理 xadmin直接使用之前的在线教育的那个就可以了 users/adminx.py #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/9/19 下午 01:15 # @Author : gao # @File : adminx.py import xadmin from us…

    2023年4月9日
    00
  • django清理migration终极解决办法

      1、django生成数据表结构的过程          在我们设计好models以后,我们可以通过以下命令生成将要同步给数据库的数据结构文件          python manage.py makemigrations          生成的文件在app目录下的migrations文件夹内以000*开头的文件。          每运行一次make…

    Django 2023年4月11日
    00
  • django之百度Ueditor富文本编辑器后台集成

    Python3 + Django2.0 百度Ueditor 富文本编辑器的集成 百度富文本编辑器官网地址:http://fex.baidu.com/ueditor/   疑问:为什么要二次集成? 答案:因为百度富文本编辑器Ueditor没有对python的支持   步骤1:   在官网下载Ueditor的任意版本代码:http://ueditor.baidu…

    Django 2023年4月13日
    00
  • Django中blank和NULL

    当我们在django中添加一个数据库字段时,我们通常会写models.CharField(max_length = 100,null = True,blank = True)。用ForeignKey,DecimalField做同样的事情。有什么基本的区别在于 null = True only blank = True only null = True,bla…

    Django 2023年4月11日
    00
  • Django实现分页显示效果

    下面我将详细讲解如何使用Django实现分页显示效果,包含两个例子。 环境与工具 Python 3.x Django 3.x 安装分页插件 Django自带分页,但是功能相对简单,对于一些高级功能可能不够用,这时我们可以使用第三方分页插件:django-pagination,使用pip安装即可: pip install django-pagination 分…

    Django 2023年5月16日
    00
  • Django项目后台不挂断运行的方法

    下面是详细讲解“Django项目后台不挂断运行的方法”的攻略: 方法一:使用Supervisor Supervisor是一个用Python编写的进程管理工具。通过在系统中安装Supervisor,我们可以将Django项目的Web服务器后台运行并在系统崩溃或关闭时继续运行。 安装Supervisor 通过包管理器安装Supervisor,例如在Debian/…

    Django 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部