Django logging配置及使用详解

下面我将为你详细讲解“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 Form基于Model定义表单

    Django Form是一个用来处理表单的工具,它可以帮助我们方便地验证表单数据、生成表单HTML代码等。而使用基于Model的Form可以让我们更方便地定义表单结构,快速生成表单代码,并且能够自动处理表单和数据库中Model的交互。 下面是基于Model定义表单的完整攻略: 定义Model 首先,我们需要先定义一个Model类,例如: from djang…

    Django 2023年3月12日
    00
  • Python的开发环境安装(MySQL、Django、PyCharm)

    技术 版本 查看命令 官方文档 API文档 下载地址 MySql 8.0.18 D:\mysql-8.0.18-winx64\bin>mysql -u root -p https://www.mysqlzh.com/doc/24.html https://www.mysqlzh.com/doc/194.html https://dev.mysql.co…

    Django 2023年4月11日
    00
  • python+django+虚拟环境(virtualenv[wrapper])+nginx+uwsgi在linux中的安装配置

    编译安装python3 安装依赖 sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev  sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqli…

    Django 2023年4月13日
    00
  • django crontab定时执行任务

    安装 pip install django-crontab 添加app名称到 settings.py中 INSTALLED_APPS = ( ‘django_crontab’,#这个不是app的名字,必须要添加到前面,不能接着app后面添加,否则会报错 … ) 接下来创建定时任务可以分成两种,一种是执行自定义的mange.py的命令,另一种是执行自定义函…

    Django 2023年4月10日
    00
  • 搭建Python的Django框架环境并建立和运行第一个App的教程

    下面是详细的攻略: 搭建Python的Django框架环境 1. 安装Python 首先,需要在你的电脑上安装Python,可以到官网下载对应的版本,建议安装最新版本。 2. 安装虚拟环境 为了隔离项目所需的包和全局Python环境,我们可以使用虚拟环境。使用以下命令安装virtualenv模块: pip install virtualenv 3. 创建虚拟…

    Django 2023年5月16日
    00
  • Python+django实现文件下载

    下面是关于Python+django实现文件下载的完整攻略以及两条示例说明。 什么是Django? Django是一个Python Web框架,采用了MVC的软件架构模式,是一个全功能的高级Web框架。Django的官方网站是djangoproject.com。 Django实现文件下载的方法 在Django中,可以通过编写视图函数实现文件的下载。 示例1:…

    Django 2023年5月16日
    00
  • django框架模型层功能、组成与用法分析

    Django框架模型层功能、组成与用法分析 1. 模型层的作用 Django框架采用了MVC模式,其中模型层是其核心部分。它的作用是连接数据库、处理数据和提供数据的接口。模型层相当于应用程序和数据库管理系统之间的中间层,它负责与数据库进行交互,提供了支持存储和检索数据的常用方法,例如添加、删除、修改和查询数据记录等。 2. 模型层的组成 模型层由模型类、管理…

    Django 2023年5月16日
    00
  • django model ValueQuerySet QuerySet 转换成JSON

    这里我有4个字段需要使用外键,那么在调取数据的时候就可以使用两个’_’进行调取,当然条件必须需要从前端传进来 models.py class HostInfo(models.Model): host_ip = models.GenericIPAddressField() usage = models.ForeignKey(‘ServiceLine’) sys…

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