【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.rhkb.cn/news/256484.html

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

相关文章

一句话总结Docker与K8S的关系

一句话总结:Docker只是容器的一种,它面向的是单体,K8S可以管理多种容器,它面向的是集群,Docker可以作为一种容器方案被K8S管理。下文继续具体介绍。 1、容器的核心概念 介绍这几个核心概念:OCI、CR、Runc、…

从Unity到Three.js(安装启动)

发现在3D数字孪生或模拟仿真方向,越来越多的公司倾向使用Web端程序,目前一直都是使用的Unity进行的Web程序开发,但是存在不少问题,比如内存释放、shader差异化、UI控件不支持复制或输入中文等。虽然大多数问题都可以找到解决方案&…

微信自动预约小程序开发指南:从小白到专家

在数字化时代,预约小程序已成为各类服务行业的必备工具。本文将指导你从零开始,通过第三方小程序制作平台,顺利开发出一款具有预约功能的实用小程序。 第一步:注册登录第三方小程序制作平台 首先,你需要选择一个适合你…

AtCoder Beginner Contest 340 C - Divide and Divide【打表推公式】

原题链接:https://atcoder.jp/contests/abc340/tasks/abc340_c Time Limit: 2 sec / Memory Limit: 1024 MB Score: 300 points 问题陈述 黑板上写着一个整数 N。 高桥将重复下面的一系列操作,直到所有不小于2的整数都从黑板上移除: 选择…

java SpringBoot2.7整合Elasticsearch(ES)7 进行文档增删查改

首先 我们在 ES中加一个 books 索引 且带有IK分词器的索引 首先 pom.xml导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>applicatio…

ruoyi若依框架SpringSecurity实现分析

系列文章 ruoyi若依框架学习笔记-01 ruoyi若依框架分页实现分析 ruoyi若依框架SpringSecurity实现分析 文章目录 系列文章前言具体分析一、项目中的SpringSecurity版本二、登录认证流程分析三、权限鉴定四、退出登录五、SpringSecurity配置类 总结 前言 在ruoyi-vue若依框…

记一次页面接口502问题:“502 Bad Gateway”

接收别人的项目进行迭代&#xff0c;项目部署到服务器上之后&#xff0c;有一个接口数据刷不出来&#xff0c;一直502 后来联想到网关的问题&#xff0c;想通过设置白名单的方式解决&#xff0c;设置之后依旧不行。 查看nginx日志发现报错&#xff1a; *169 connect() failed …

【Git】移除Git中的文件

有的时候需要移除或者更新 Git 中的文件&#xff0c;我们无法直接在远程仓库中移除&#xff0c;移除或者更新操作需要在本地端实现。 1、移除被跟踪文件 当某个文件被添加到暂存区或者本地仓库&#xff0c;此时会被标记为“跟踪状态”&#xff0c;此时 Git 就会代为管理这个文…

【go语言】一个简单HTTP服务的例子

一、Go语言安装 Go语言&#xff08;又称Golang&#xff09;的安装过程相对简单&#xff0c;下面是在不同操作系统上安装Go语言的步骤&#xff1a; 在Windows上安装Go语言&#xff1a; 访问Go语言的官方网站&#xff08;golang.org&#xff09;或者使用国内镜像站点&#xff0…

vue3 腾讯tdesign 后台管理框架的使用

1.介绍 TDesign 是具有包容性的设计体系&#xff0c;它强调为业务提供产品、服务等过程中&#xff0c;追求以人为本、人人受益的包容性&#xff0c;要求搭建过程中&#xff0c;了解业务底层&#xff0c;理解业务场景的多样性&#xff0c;并在繁杂的业务场景中寻找共性和特性&a…

GeoServer 2.11.1升级解决Eclipse Jetty 的一系列安全漏洞问题

Eclipse Jetty 资源管理错误漏洞(CVE-2021-28165) Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7656) Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7657) Eclipse Jetty HTTP请求走私漏洞(CVE-2017-7658) Jetty 信息泄露漏洞(CVE-2017-9735) Eclipse Jetty 安全漏洞(CVE-2022-20…

算法沉淀——分治算法(leetcode真题剖析)

算法沉淀——分治算法 快排思想01.颜色分类02.排序数组03.数组中的第K个最大元素04.库存管理 III 归并思想01.排序数组02.交易逆序对的总数03.计算右侧小于当前元素的个数04.翻转对 分治算法是一种解决问题的算法范式&#xff0c;其核心思想是将一个大问题分解成若干个小问题&a…

Unity笔记:相机移动

基础知识 鼠标输入 在Unity中&#xff0c;开发者在“Edit” > “Project Settings” > “Input Manager”中设置输入&#xff0c;如下图所示&#xff1a; 在设置了Mouse X后&#xff0c;Input.GetAxis("Mouse X")返回的是鼠标在X轴上的增量值。这意味着它会…

Solidworks:从2D走向3D

Sokidworks 的强大之处在于三维实体建模&#xff0c;这个形状看似复杂&#xff0c;实际上只需要拉伸一次&#xff0c;再做一次减法拉伸就行了。第一次做三维模型&#xff0c;费了不少时间才搞明白。 接下来做一个稍微复杂一点的模型&#xff0c;和上面这个操作差不多&#xff0…

LeetCode.144. 二叉树的前序遍历

题目 144. 二叉树的前序遍历 分析 这道题目是比较基础的题目&#xff0c;我们首先要知道二叉树的前序遍历是什么&#xff1f; 就是【根 左 右】 的顺序&#xff0c;然后利用递归的思想&#xff0c;就可以得到这道题的答案&#xff0c;任何的递归都可以采用 栈 的结构来实现…

利用Windows10漏洞破解密码(保姆级教学)

前言: 本篇博客只是技术分享并非非法传播知识,实验内容均是在虚拟机中进行,并非真实环境 正文: 一.windows10电脑密码破解 1)开启windows10虚拟机,停留在这个页面 2&#xff09;按5次Shift键,出现这个粘滞键,如果没有出现的,则说明漏洞已经修复 3)重新启动,在这个页面的时候…

Qt网络编程-TCP与UDP

网络基础 TCP与UDP基础 关于TCP与UDP的基础这里就不过多介绍了&#xff0c;具体可以查看对应百度百科介绍&#xff1a; TCP&#xff08;传输控制协议&#xff09;_百度百科 (baidu.com) UDP_百度百科 (baidu.com) 需要知道这两者的区别&#xff1a; 可靠性&#xff1a; TC…

【C语言】实现单链表

目录 &#xff08;一&#xff09;头文件 &#xff08;二&#xff09;功能实现 &#xff08;1&#xff09;打印单链表 &#xff08;2&#xff09;头插与头删 &#xff08;3&#xff09;尾插与尾删 &#xff08;4&#xff09; 删除指定位置节点 和 删除指定位置之后的节点 …

【工作学习 day04】 9. uniapp 页面和组件的生命周期

问题描述 uniapp常用的有&#xff1a;页面和组件&#xff0c;并且页面和组件各自有各自的生命周期函数&#xff0c;那么在页面/组件请求数据时&#xff0c;是用created呢&#xff0c;还是用onLoad呢&#xff1f; 先说结论: 组件使用组件的生命周期&#xff0c;页面使用页面的…

第62讲商品搜索动态实现以及性能优化

商品搜索后端动态获取数据 后端动态获取数据&#xff1a; /*** 商品搜索* param q* return*/GetMapping("/search")public R search(String q){List<Product> productList productService.list(new QueryWrapper<Product>().like("name", q)…