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日

相关文章

  • Python之路【第十七篇】:Django【进阶篇 】 Python之路【第十七篇】:Django【进阶篇 】

      Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user=’root’, db=’w…

    Django 2023年4月13日
    00
  • 用soaplib的django webserver

    前面写过怎么利用suds来调用webservicePython调用基于https协议的SOAP WebService,这篇讲的是如何用soaplib开发SOAP WebService(最近发现国外开源社区里把json方式的别的Web服务也叫做WebService,叫法跟Java和.Net的约定叫法不太一样,这里加上SOAP以跟json格式的WebServic…

    Django 2023年4月10日
    00
  • Django添加数据、查询数据(转载)

    2018年05月18日 00:00:00 瞿凯Kai 阅读数 766   添加数据 创建学生模型并添加学生数据 1.前文中已提及模型建立、数据库连接及文件迁移,此处省略 2.学生数据添加方法(写在views中) def add(requst): if request.method == ‘GET’: return render(request, ‘index…

    Django 2023年4月12日
    00
  • Django中MEDIA_ROOT和MEDIA_URL

    在django上传图片前端使用动态的配置方法 MEDIA_ROOT 代表着 要上传的路径会和你在models中写的上传的路径进行拼节形成最终文件上传的路径  MEDIA_URL主要就是映射了 在前端使用media_url 当你的media_root 发生改变的时候不用去更改前端模板中的内容 要想正常的显示图片 还需要下面几步: 1 在settings 中配置…

    Django 2023年4月16日
    00
  • Django2.0 models中的on_delete参数

    一、外键、OneToOne字段等on_delete为必须参数  – 如下ForeignKey字段源码,to、on_delete为必须参数to:关联的表on_delete:当该表中的某条数据删除后,关联外键的操作related_name:反查参数,设置后可以在被关联表中通过该字段反查外键所在表,默认:set_表名to_field:默认主键,因为mysql只支持…

    Django 2023年4月10日
    00
  • django 返回数据的几种常用姿势

    django 返回数据的几种常用姿势 render 传入一个html,返回一个页面 def case_list(request): return render(request, ‘case_list.html’) 传入一个html,再传入一个字典,字典的key和value作用于html home.html <h1>欢迎{{ username }}…

    Django 2023年4月11日
    00
  • 用Django写天气预报查询网站

    下面为您详细讲解“用Django写天气预报查询网站”的完整攻略,包含两条示例说明。 一、Django基础知识 1.1 什么是Django? Django 是一个高级的 Python web 框架,可以快速搭建 Web 应用程序和网站。Django 非常强大,提供许多内置功能,如 ORM 、模板和缓存等。 1.2 安装Django 在安装 Django 之前,…

    Django 2023年5月16日
    00
  • fastapi与django异步的并发对比分析

    下面我将详细讲解“FastAPI与Django异步的并发对比分析”的攻略。 简介 FastAPI和Django都是Python的Web框架,用于快速构建Web应用程序。FastAPI是一个新的框架,专注于高性能和强类型支持,具有异步能力。Django是一个成熟、完整的框架,具有广泛的社区支持和丰富的功能。本文将对比这两个框架在异步并发方面的性能表现。 环境准…

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