【Django】Django日志管理

Django日志管理

Django使用Python内置的logging模块处理系统日志。

1.日志框架的组成元素

Python logging 配置由下面四部分组成:

  • Loggers

  • Handlers

  • 过滤器

  • Formatters

1.1 Loggers

logger是日志系统的入口,每个 logger都是命名了的 bucket,消息写入bucket以便进一步处理。

logger 可以配置日志级别,日志级别描述了由该logger处理的消息的严重性,Python 定义了下面几种日志级别:

  • DEBUG:排查故障时使用的低级别系统消息。

  • INFO:一般的系统消息。

  • WARNING:描述系统发生了一些小问题的信息。

  • ERROR:描述系统发生了大问题的信息。

  • CRITICAL:描述系统发生了严重问题的信息。

每一条写入logger的消息都是一条日志记录,每一条日志记录都包含日志级别,代表对应消息的严重程度,日志记录还包含有用的元数据,来描述被记录了日志的事件细节,例如堆栈跟踪或者错误码。

当logger处理一条消息时,会将自己的日志级别和这条消息的日志级别做对比,如果消息的日志级别匹配高于logger的日志级别,它就会被进一步处理,否则这条消息就会被忽略掉。

当logger确定了一条消息需要处理之后,会把它传给Handler。

1.2 Handlers

Handler是决定如何处理logger中每一条消息的引擎,它描述特定的日志行为,例如把消息输出到屏幕、文件或者网络socket。

和logger一样,handler也有日志级别的概念,如果一条日志记录的级别不匹配或者低于handler的日志级别,对应的消息会被handler忽略。

一个logger可以有多个handler,每个handler可以有不同的日志级别,这样就可以根据消息的重要性不同,来提供不同格式的输出。

1.3 过滤器

在日志记录从logger传到handler的过程中,使用filter来做额外的控制。

默认情况下,只要级别匹配,任何日志消息都会被处理。不过,也可以通过添加filter来给日志处理的过程增加额外条件。例如,可以添加一个filter只允许某个特定来源的ERROR消息输出。

Filter换呗用来在日志输出之前对日志记录做修改。例如,可以写一个filter,当满足一定条件时,把日志记录从ERROR降到WARNING级别。

Filter在logger和handler中都可以添加,多个Filter可以链接起来使用,来做多重过滤操作。

1.4 Formatters

日志记录最终是需要以文本来呈现的,Formatter描述了文本的格式,一个Formatter通过包含 LogRecord attributes 的Python格式化字符串组成,不过你也可以为特定的格式来配置自定义的Formatter。

2.在Django视图中使用logging

在代码文件中引入logging模块,即可发起对应的调用。

from django.shortcuts import render
from django.http import HttpResponse
import logging
​
# logger实例创建
logger = logging.getLogger(__name__)
def index(request):
​# 记录日志信息logger.debug('debug日志')logger.info('info日志')logger.warning('warning日志')logger.error('error日志')return HttpResponse("Django 日志测试")

这里只是调用logging模块,并未配置相应handlers,默认在控制台输出debug级别以上的日志信息。

logger对象有以下几个内置方法:

  • logger.debug()

  • logger.info()

  • logger.warning()

  • logger.error()

  • logger.critical()

  • logger.exception():创建一个包含当前异常堆栈的ERROR级别日志消息。

3.在Django中配置logging

3.1 将日志输出到文件中

在 settings.py 文件中配置如下内容

import os
​
LOGGING = {'version': 1,'disable_existing_loggers': False,'handlers': {'file': {'level': 'DEBUG','class': 'logging.FileHandler','filename': '/path/to/django/debug.log',},},'loggers': {'django': {'handlers': ['file'],'level': 'DEBUG','propagate': True,},},
}

代码测试

3.2 将日志输出到控制台

在 settings.py 文件中配置如下内容

import os
​
LOGGING = {'version': 1,'disable_existing_loggers': False,'handlers': {'console': {'class': 'logging.StreamHandler',},},'root': {'handlers': ['console'],'level': 'WARNING',},'loggers': {'django': {'handlers': ['console'],'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),'propagate': False,},},
}

代码测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/672192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文了解C#面向对象编程:封装

在软件开发过程中,面向对象编程是一种非常流行的编程范式。它主要强调将现实世界中的问题抽象成对象,通过对象之间的交互来解决问题。C#作为.NET框架的主要编程语言,自然也支持面向对象编程。在C#中,封装是面向对象编程的三大特性…

Redis面试题43

人工智能在未来会有哪些可能的发展趋势? 答:人工智能在未来将继续迎来许多可能的发展趋势,以下是一些可能的方向: 更强大的算法和模型:人工智能算法和模型将不断改进和优化,为更复杂的数据和问题提供更强大…

rust给py写拓展如此简单

很久没写rust,主要是写业务逻辑实在用不上这高性能.不过惊奇发现rust和py结合的如此之好,记录下: 搞一个python环境,pip install maturin建立一个项目文件,cd进去 maturin init照着生成模版正常写rust,完毕后maturin develop,注意这个命令包括把拓展包安装到虚拟环境site pack…

GEE数据集——美国干旱监测数据集(更新)

美国干旱监测 美国干旱监测》是每周四发布的地图,显示美国部分地区的干旱情况。该地图采用五种分级:异常干旱(D0),显示可能进入或即将摆脱干旱的地区;四级干旱:中度(D1)、…

Java学习笔记2024/2/6

练习三:验证码 需求: 定义方法实现随机产生一个5位的验证码 验证码格式: 长度为5 前四位是大写字母或者小写字母 最后一位是数字 package com.angus.comprehensiveExercise; ​ import java.util.Random; ​ public class test3 {publ…

蓝桥杯嵌入式第8届真题(完成) STM32G431

蓝桥杯嵌入式第8届真题(完成) STM32G431 题目 分析和代码 对比第六届和第七届,这届的题目在逻辑思维上确实要麻烦不少,可以从题目看出,这届题目对时间顺序的要求很严格,所以就可以使用状态机的思想来编程,拿到类似题…

记一次使用gophish开展的钓鱼演练

这周接到客户要求,组织一次钓鱼演练,要求是发送钓鱼邮件钓取用户账号及个人信息。用户提交后,跳转至警告界面,以此来提高客户单位针对钓鱼邮件的防范意识。 与客户沟通后得知他们企业内部是由邮箱网关的,那么就意味着…

正点原子--STM32基本定时器学习笔记(1)

目录 1. 定时器概述 1.1 软件定时原理 1.2 定时器定时原理 1.3 定时器分类 1.4 定时器特性表 1.5 基本、通用、高级定时器的功能整体区别 2. 基本定时器简介 3. 基本定时器框图 时钟树分析 这部分是笔者对基本定时器的理论知识进行学习与总结!主要记录学习…

UsernamePasswordAutheticationFilter源码解读和实践

UsernamePasswordAuthenticationFilter的目录 一、概述(重点)二、标红小步骤解读2.1 步骤1(标红1)2.1.1 AbstractAuthenticationProcessingFilter2.1.2 UsernamePasswordAuthenticationFilter 2.3 步骤2 和 步骤3(标红…

【SpringBoot篇】解决Redis分布式锁的 误删问题 和 原子性问题

文章目录 🍔Redis的分布式锁🛸误删问题🎈解决方法🔎代码实现 🛸原子性问题🌹Lua脚本 ⭐利用Java代码调用Lua脚本改造分布式锁🔎代码实现 🍔Redis的分布式锁 Redis的分布式锁是通过利…

K8S二进制部署详解,你想要的都在这里

文章目录 1.k8s环境规划2.kubeadm和二进制安装k8s适用场景分析3.必备工具安装3.初始化3.1 配置静态IP3.2 配置主机名3.3 配置hosts文件3.4 配置主机之间无密码登录,每台机器都按照如下操作3.5 关闭firewalld防火墙3.6 关闭selinux3.7 关闭交换分区swap3.8 修改内核参…

synchronized 浅读解析 一

引言 在学习synchronized前,我们实际上是需要先了解Java对象在jvm中的储存结构,在了解了它的实际储存方式后,再对后边的锁学习会有一个更好更深入的理解。 一、对象结构 我们为什么要知道什么是对象头 在学习synchronized的时候&#xff0c…

nginx upstream server主动健康检测模块ngx_http_upstream_check_module 使用和源码分析(上)

目录 1. 缘起2. 配置指令2.1 check2.2 check_keepalive_requests2.3 check_http_send2.4 check_http_expect_alive2.5 check_shm_size2.6 check_status3. 加载健康检测模块3.1 模块的编译3.2 模块的配置4. 测试验证5. 思考与问题6. 源码分析1. 缘起 众所周知,nginx原生的upst…

破除Github API接口的访问次数限制

破除Github API接口的访问次数限制 1、Github介绍2、Github API接口2.1 介绍2.2 使用方法 3、Github API访问限制3.1 访问限制原因3.2 访问限制类别 4、Github API访问限制破除4.1 限制破除原理4.2 限制破除示例 1、Github介绍 Github,是一个面向开源及私有软件项目…

提升你的PHP开发效率:探索JetBrains PhpStorm 2022的全新特性

在当今快速发展的软件开发领域,选择一个强大且高效的开发工具对于提升开发效率、保证代码质量至关重要。对于PHP开发者来说,JetBrains PhpStorm一直是市场上最受欢迎的IDE之一。随着JetBrains PhpStorm 2022的发布,这款工具带来了一系列创新功…

【Docker】01 Docker安装与配置

文章目录 一、Docker二、离线安装Docker三、联网安装Docker3.1 下载YUM软件库文件3.2 安装epel-release3.3 安装yum-utils3.4 设置镜像仓库3.5 查看docker-ce所有版本3.6 安装Docker3.7 启动Docker3.8 查看Docker信息3.9 启动第一个容器 四、一些配置4.1 登录DockerHub4.2 镜像…

MybatisPlus快速入门及常见设置

目录 一、快速入门 1.1 准备数据 1.2 创建SpringBoot工程 1.3 使用MP 1.4 获取Mapper进行测试 二、常用设置 2.1 设置表映射规则 2.1.1 单独设置 2.1.2 全局设置 2.2 设置主键生成策略 2.2.1 为什么会有雪花算法? 2.2.2 垂直分表 2.2.3 水平分表 2.…

JavaScript流程控制详解之顺序结构和选择结构

流程控制 流程控制,指的是控制程序按照怎样的顺序执行 在JavaScript中,共有3种流程控制方式 顺序结构选择结构循环结构 顺序结构 在JavaScript中,顺序结构是最基本的结构,所谓的顺序结构,指的是代码按照从上到下、…

R语言入门笔记2.3

for循环 for循环用于多次执行相似的代码。其基本语法如下: for (variable in sequence) {# 在每次迭代中执行的代码 }其中: variable 是一个变量,用于在每次迭代中存储序列中的当前元素。sequence 是一个向量,可以是数字序列、字…

上海亚商投顾:沪指涨超3% 深成指和创指双双飙涨超6%

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 今日A股三大指数一改近期低迷状态,早盘小幅低开后一路高歌猛进集体大涨,沪指涨超3%&am…