【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,一经查实,立即删除!

相关文章

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

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

蓝桥杯嵌入式第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的分布式锁是通过利…

synchronized 浅读解析 一

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

破除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的发布,这款工具带来了一系列创新功…

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中,顺序结构是最基本的结构,所谓的顺序结构,指的是代码按照从上到下、…

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

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

锁(二)队列同步器AQS

一、队列同步器AQS 1、定义 用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。是实现锁的关键。 2、实现 同步器的设计是基于模板方法模式的,也就是说&#…

如何安装x11vnc并结合cpolar实现win远程桌面Deepin

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂&#xff…

11.0 Zookeeper watcher 事件机制原理剖析

zookeeper 的 watcher 机制,可以分为四个过程: 客户端注册 watcher。服务端处理 watcher。服务端触发 watcher 事件。客户端回调 watcher。 其中客户端注册 watcher 有三种方式,调用客户端 API 可以分别通过 getData、exists、getChildren …

GLSL ES 1.0

GLSL ES 概述 写在前面 程序是大小写敏感的每一个语句都应该以英文分号结束一个shader必须包含一个main函数,该函数不接受任何参数,并且返回voidvoid main() { }数据值类型 GLSL支持三种数据类型: 整型浮点型:必须包含小数点&…

python 动态显示数据。

界面显示动态的数据。 from time import sleep import serialimport tkinter as tklis[1,10,40] # 打开串行端口 ser serial.Serial(COM3, 9600) # 9600为波特率,根据实际情况进行调整# 创建窗口和画布 window tk.Tk() canvas tk.Canvas(window, width400, heig…

高阶滤波器

一阶后向差分:s(1-z^(-1))/T dx/dt[x(k)-x(k-1)]/T[x(k)-x(k)z^(-1)]/Tx(k)*(1-z^(-1))/T 一阶前向差分:s(z-1)/T dx/dt[x(k1)-x(k)]/T[z*x(k)-x(k)]/Tx(k)*(z-1)/T 双线性差分:s(2/T)*(1-z…

通过 docker-compose 部署 Flink

概要 通过 docker-compose 以 Session Mode 部署 flink 前置依赖 Docker、docker-composeflink 客户端docker-compose.yml version: "2.2" services:jobmanager:image: flink:1.17.2ports:- "8081:8081"command: jobmanagervolumes:- ${PWD}/checkpoin…

【大模型上下文长度扩展】FlashAttention:高效注意力计算的新纪元

FlashAttention:高效注意力计算的新纪元 核心思想核心操作融合,减少高内存读写成本分块计算(Tiling),避免存储一次性整个矩阵块稀疏注意力,处理长序列时的效率问题利用快速 SRAM,处理内存与计算…