Django日志

news2024/11/22 17:50:14

【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客

《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com)

Django 5框架Web应用开发_夏天又到了的博客-CSDN博客

本节主要介绍关于Django框架日志方面的内容。Django使用Python的内置日志记录模块执行系统日志记录,主要包括了Logger、Handler、Filter和Formatter这4个模块。

11.2.1  Logger

Logger是进入日志系统的入口点,每个Logger都是一个命名的存储集合,可以将消息写入其中以进行处理。

Logger具有日志级别,日志级别描述了Logger将处理的消息的严重性。Python定义了以下日志级别:

  • DEBUG:用于调试目的的底层系统信息。
  • INFO:通用系统信息。
  • WARNING:描述已发生的警告问题的信息。
  • ERROR:描述已发生的主要问题的信息。
  • CRITICAL:描述已发生的严重问题的信息。

写入Logger的每条消息都是一个日志记录。每个日志记录还具有指示该特定消息的严重性的日志级别。日志记录还可以包含有用的元数据,该元数据描述了正在记录的事件,可以包括详细信息,例如堆栈跟踪或错误代码。

将消息提供给Logger时,会将消息的日志级别与Logger的日志级别进行比较。如果消息的日志级别达到或超过Logger本身的日志级别,则将对消息进行进一步处理;如果没有,该消息将被忽略。

当Logger确定需要处理消息后,就会将消息传递给相应处理程序(Handle)。

11.2.2  Handler

处理程序是确定Logger中每个消息发生什么情况的引擎,描述了特定的日志记录行为。例如,将消息写到屏幕、文件或网络套接字。

如同Logger一样,处理程序也具有日志级别。如果日志记录的日志级别不满足或超过处理程序的级别,则处理程序将忽略该消息。

一个Logger可以具有多个处理程序,并且每个处理程序可以具有不同的日志级别。这样,可以根据消息的重要性提供不同形式的通知。例如,可以安装一个处理程序,将ERROR和CRITICAL消息转发到分页服务,而另一个处理程序将所有消息(包括ERROR和CRITICAL消息)记录到文件中,以供以后分析。

11.2.3  Filter

Filter(过滤器)用于提供额外的控制,以控制哪些日志记录从logger传递到Handle。

默认情况下,将处理所有符合日志级别要求的日志消息。但是,通过安装过滤器可以在日志记录过程中放置其他条件。例如,可以安装一个过滤器,该过滤器仅允许发出来自特定来源的ERROR消息。

过滤器还可以用于在发出之前修改日志记录。例如,可以编写一个过滤器,如果满足一组特定的条件,则将ERROR日志记录降级为WARNING记录。

过滤器可以安装在Logger或Handle上,在一个链中可以使用多个过滤器来执行多个过滤操作。

11.2.4  Formatter

最终的日志记录需要呈现为文本,而格式器(Formatter)描述了该文本的确切格式。格式化程序通常由包含LogRecord属性的Python格式化字符串组成。不过,也可以编写自定义格式化程序,以实现特定的格式化行为。

11.2.5  使用日志记录

使用日志记录的方法很简单,在Django项目的配置文件setting.py中配置好Logger、Handle、Filter和Formatters后,就可以将需要的日志记录的调用放入代码中。下面是几个比较常用的代码实例。

第一个是一个相对简单的配置,用于将Django框架的Logger中的所有日志记录写入本地文件。

【代码11-7】

01  LOGGING = {
02      'version': 1,
03      'disable_existing_loggers': False,
04      'handlers': {
05          'file': {
06              'level': 'DEBUG',
07              'class': 'logging.FileHandler',
08              'filename': 'debug.log',
09          },
10      },
11      'loggers': {
12          'django': {
13              'handlers': ['file'],
14              'level': 'DEBUG',
15              'propagate': True,
16          },
17      },
18  }

第二个是一个相对完整的配置,包括Logger、Handle、Filter和Formatter的全部配置信息。

【代码11-8】

01  LOGGING = {
02      'version': 1,
03      'disable_existing_loggers': False,
04      'formatters': {
05          'verbose': {
06    'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d 
%(message)s'
07          },
08          'simple': {
09              'format': '%(levelname)s %(message)s'
10          },
11      },
12      'filters': {
13          'special': {
14              '()': 'project.logging.SpecialFilter',
15              'foo': 'bar',
16          },
17          'require_debug_true': {
18              '()': 'django.utils.log.RequireDebugTrue',
19          },
20      },
21      'handlers': {
22          'console': {
23              'level': 'INFO',
24              'filters': ['require_debug_true'],
25              'class': 'logging.StreamHandler',
26              'formatter': 'simple'
27          },
28          'mail_admins': {
29              'level': 'ERROR',
30              'class': 'django.utils.log.AdminEmailHandler',
31              'filters': ['special']
32          }
33      },
34      'loggers': {
35          'django': {
36              'handlers': ['console'],
37              'propagate': True,
38          },
39          'django.request': {
40              'handlers': ['mail_admins'],
41              'level': 'ERROR',
42              'propagate': False,
43          },
44          'myproject.custom': {
45              'handlers': ['console', 'mail_admins'],
46              'level': 'INFO',
47              'filters': ['special']
48          }
49      }
50  }

这个Logger配置完成了以下工作:

(1)将配置标识为dictConfig版本(version=1)。目前,这是唯一的dictConfig格式版本。

(2)定义了两个Formatter。

  • 简单信息:仅输出日志级别名称(例如DEBUG)和日志消息。格式字符串是普通的Python格式字符串,描述了将在每条记录行上输出的详细信息。可在Formatter对象中找到可以输出的详细信息的完整列表。
  • 详细信息:输出日志级别名称、日志消息、生成日志消息的时间、进程、线程和模块。

(3)定义了两个Filters。

  • project.logging.SpecialFilter:使用特殊别名。如果此过滤器需要其他参数,则可以在过滤器配置字典中将它们作为其他关键字提供。
  • django.utils.log.RequireDebugTrue:当DEBUG为True时,会传递记录。

(4)定义了两个Handler。

  • 控制台:一个StreamHandler,它将任何INFO(或更高版本)消息输出到sys.stderr。该处理程序使用简单的输出格式。
  • mail_admins:一个AdminEmailHandler,通过电子邮件将任何ERROR(或更高版本)消息发送到站点ADMINS。该处理程序使用特殊的过滤器。

(5)配置了3个Logger。

  • django:该Logger将所有消息传递到控制台处理程序。
  • django.request:该Logger将所有错误消息传递给mail_admins处理程序。另外,该记录器被标记为不传播消息,这意味着Logger将不会处理写入django.request的日志消息。
  • myproject.custom:该Logger将所有信息传递到INFO或更高级别,还将特殊过滤器传递给两个处理程序——控制台和mail_admins。这意味着所有INFO级别的消息(或更高级别)将被打印到控制台,错误和严重消息也将通过电子邮件输出。

下面通过一个代码实例演示一下Logger的用法。首先,新建一个简单Django项目MyLogSite,然后创建一个简单的视图,通过该视图输出日志信息。具体代码如下:

【代码11-9】(详见源代码MyLogSite项目中的MyLogSite/views.py文件)

01  from django.http import HttpResponse
02  
03  import logging
04  logger = logging.getLogger('django')
05  
06  def index(request):
07      logger.info('info')
08      logger.error('error')
09      logger.warn('warn')
10      logger.debug('debug')
11      return HttpResponse("This is homepage!")

【代码分析】

在第03行代码中,通过import关键字引入了logging对象。

在第04行代码中,通过logging对象调用getLogger('django')方法获取logger对象。

在第06~11行代码定义的视图函数中,通过logger对象分别调用info()方法、error()方法、warn()方法和debug()方法输出日志信息。

最后,在项目配置文件settings.py中配置logger信息,具体代码如下:

【代码11-10】(详见源代码MyLogSite项目中的MyLogSite/settings.py文件)

01  BASE_LOG_DIR = os.path.join(BASE_DIR, "logs")
02
03  LOGGING = {
04      'version': 1,
05      'disable_existing_loggers': False,
06      'handlers': {
07          'file': {
08              'level': 'DEBUG',
09              'class': 'logging.FileHandler',
10              'filename': os.path.join(BASE_LOG_DIR, 'opt.log'),
11          },
12      },
13      'loggers': {
14          'django': {
15              'handlers': ['file'],
16              'level': 'DEBUG',
17              'propagate': True,
18          },
19      },
20  }

【代码分析】

在第01行代码中,配置了日志文件的输出目录BASE_LOG_DIR。注意,日志输出目录(logs)一般配置在项目根目录下。

第03~20行代码定义了Logger配置信息,与【代码11-7】基本一致。需要注意第10行代码中,通过前面定义的BASE_LOG_DIR参数指定了具体的日志信息文件opt.log。

面,演示一下Django项目中Logger日志的使用效果。首先,查看一下项目根目录下的logs目录情况,如图11.1所示。

然后,通过Firefox浏览器打开MyLogSite项目运行一下,如图11.2所示。页面中出现了提示信息,表示项目运行成功。

再查看一下项目根目录下的logs目录情况,如图11.3所示。

如图11.2中的箭头和标识所示,Logger日志信息文件opt.log已经生成了。下面我们打开该日志文件查看一下,如图11.4中的箭头和标识所示,虽然Logger日志信息文件opt.log中输出了很多信息,但还是可以找到【代码11-9】中通过logger对象输出的调试信息。

图11.4  MyLogSite项目的日志信息(opt.log)文件

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

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

相关文章

构建安全畅通的道路网络:EasyCVR视频汇聚平台在道路监控中的创新应用

随着城市化进程的加速和交通流量的不断增加,道路监控已成为确保交通安全、维护社会秩序的重要手段。道路上的监控摄像头多种多样,大致可以分为这几类:交通道路监控、治安监控、路口违章监控,以及车辆测速监控等。基于智慧交通的需…

YoloV8修改分类(Classify)的前处理(记录)

修改原因 yolo自带的分类前处理对于长方形的数据不够友好,存在特征丢失等问题修改后虽然解决了这个问题但是局部特征也会丢失因为会下采样程度多于自带的,总之具体哪种好不同数据应该表现不同我的数据中大量长宽比很大的数据所以尝试修改自带的前处理&a…

怎么做静态码一物一码?批量制作静态码的简单方法

静态二维码是日常很常见的一种二维码类型,一会用来展示文本或者链接跳转等用途使用,比如在很多的物品包装上,扫描二维码就可以查看物品对应的商品编码,就是静态二维码应用的一种。那么静态二维码批量生成的方法是什么样的呢&#…

干货 | Selenium+chrome自动批量下载地理空间数据云影像

1.背景介绍 1.1地理空间数据云 由中国科学院计算机网络信息中心科学数据中心成立的地理空间数据云平台是常见的下载空间数据的平台之一。其提供了较为完善的公开数据,如LANDSAT系列数据,MODIS的标准产品及其合成产品,DEM数据(SR…

客户需求挖掘的三个步骤

本文将介绍客户需求挖掘的三个关键步骤,帮助企业更好地理解客户,并提供个性化的服务。通过分析客户需求,可以更好地满足客户期望,提升客户满意度和忠诚度。 前言 本文将介绍客户需求挖掘的三个关键步骤,帮助企业更好地…

ZooKeeper--分布式协调服务

文章目录 ZooKeeperzk的由来zk解决了什么问题 ZK工作原理ZK数据模型zk功能1.命名服务2.状态同步3.配置中心4.集群管理 zk部署单机启动zk验证zk zk集群集群角色选举过程1.节点角色状态2.选举ID3.具体过程4.心跳机制5.ZAB协议 ZooKeeper 选举示例1.第一轮投票:2.节点收…

Flutter学习之一搭建开发环境

Flutter学习之一:搭建ununtu系统开发环境 一.背景 随着企业发展跟环境的变化,目前大前端开发越来越火,在国内应该是一个趋势;个人的技术栈主要还是在原生安卓开发上;长江后浪推前浪,如果不及时学习新知识&#xff0c…

中文文本分类详解及与机器学习算法对比

一.文本分类 文本分类旨在对文本集按照一定的分类体系或标准进行自动分类标记,属于一种基于分类体系的自动分类。文本分类最早可以追溯到上世纪50年代,那时主要通过专家定义规则来进行文本分类;80年代出现了利用知识工程建立的专家系统&…

首届云原生编程挑战赛总决赛冠军比赛攻略_greydog.队

关联比赛: 首届云原生编程挑战赛【复赛】实现一个 Serverless 计算服务调度系统 一、初赛赛道一(实现一个分布式统计和过滤的链路追踪) 赛题分析 1、数据来源 采集自分布式系统中的多个节点上的调用链数据,每个节点一份数据文件。数据格式…

系统架构师考试学习笔记第四篇——架构设计实践知识(21)安全架构设计理论与实践

本章考点: 第21课时主要学习信息系统中安全架构设计的理论和工作中的实践。根据考试大纲,本课时知识点会涉及案例分析题和论文题(各占25分),而在历年考试中,综合知识选择题目中也有过诸多考查。本课时内容侧重于知识点记忆;,按照以往的出题规律,安全架构设计基础知识…

工具知识 | Linux常用命令

参考 linw7的github《鸟哥的Linux私房菜》 一.文件管理 1.文件查找:find2.文件拷贝:cp3.打包解包:tar 二.文本处理 1.(显示行号)查看文件:nl2.文本查找:grep3.排序:sort4.转换:tr5.切分文本&…

Web 基础——Apache

Event Worker 的升级版、把服务器进程和连接进行分析,基于异步 I/O 模型。 请求过来后进程并不处理请求,而是直接交由其它机制来处理,通过 epoll 机制来通知请求是否完成; 在这个过程中,进程本身一直处于空闲状态&am…

【目标检测数据集】铁轨表面缺损检测数据集4789张VOC+YOLO格式

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4789 标注数量(xml文件个数):4789 标注数量(txt文件个数):4789 标注…

只有IP地址没有域名怎么实现HTTPS访问?

🔐 实现IP地址HTTPS访问 🌐 确认公网IP地址 公网IP:确保你拥有一个公网IP地址,或者内网映射公网,这是实现HTTPS访问的前提。 📝 选择证书颁发机构(CA) 选择CA:选择一个…

【Qt】Qt音频

Qt 音频 在 Qt 中,⾳频主要是通过 QSound 类来实现。但是需要注意的是 QSound 类只⽀持播放 wav 格式的⾳频⽂件。也就是说如果想要添加⾳频效果,那么⾸先需要将 ⾮wav格式 的⾳频⽂件转换为 wav 格式。 【注意】使⽤ QSound 类时,需要添加模…

【C#Mutex】 initiallyOwned错误引起的缺陷

临界区只能对同一个进程的不同线程同步,互斥量可以跨进程同步。典型应用场景:两个exe会操作同一个注册表项。 错误代码 封装类 public class CMutexHelp : IDisposable {public CMutexHelp(){s_mutex.WaitOne();} private static Mutex s_mutex …

深度学习-目标检测(二)Fast R-CNN

一:Fast R-CNN Fast R-CNN 是一篇由Ross Girshick 在 2015 年发表的论文,题为 “Fast R-CNN”。这篇论文旨在解决目标检测领域中的一些问题,特别是传统目标检测方法中存在的速度和准确性之间的矛盾。 论文摘要:本文提出了一种基于…

关于tomcat如何设置自启动的设置

希望文章能给到你启发和灵感~ 如果觉得文章对你有帮助的话,点赞 关注 收藏 支持一下博主吧~ 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、Windows 下的设置服务自启2.1 服务的注册2.2 开启自启 三、MacOS下设置服务自启…

ROS CDK魔法书:建立你的游戏王国(Python篇)

引言 在虚拟游戏的世界里,数字化的乐趣如同流动的音符,谱写着无数玩家的共同回忆。而在这片充满创意与冒险的乐园中,您的使命就是将独特的游戏体验与丰富的技术知识相结合,打造出令人难以忘怀的作品。当面对如何实现这一宏伟蓝图…

【数据结构】4——树和森林

数据结构——4树和森林 笔记 文章目录 数据结构——4树和森林树的存储结构双亲表示法孩子链表孩子兄弟表示法(二叉树表示法、二叉链表表示法) 树与二叉树转换森林和二叉树转化森林转二叉树二叉树转森林 树和森林的遍历树先根后根层次 森林 树的存储结构…