Django 的日志机制-2

logging 结构

在 Django 中使用 Python 的标准库 logging 模块来记录日志,关于 logging 的配置,我这里不做过多介绍,只写其中最重要的四个部分:LoggersHandlersFilters 和 Formatters

Loggers

Logger 即记录器,是日志系统的入口。它有三个重要的工作:

  • 向应用程序(也就是你的项目)公开几种方法,以便运行时记录消息
  • 根据传递给 Logger 的消息的严重性,确定消息是否需要处理
  • 将需要处理的消息传递给所有感兴趣的处理器 Handler

每一条写入 Logger 的消息都是一条日志记录,每一条日志记录都包含级别,代表对应消息的严重程度。常用的级别如下:

  • DEBUG:排查故障时使用的低级别系统信息,通常开发时使用
  • INFO:一般的系统信息,并不算问题
  • WARNING:描述系统发生小问题的信息,但通常不影响功能
  • ERROR:描述系统发生大问题的信息,可能会导致功能不正常
  • CRITICAL:描述系统发生严重问题的信息,应用程序有崩溃的风险

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

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

Handlers

Handler 即处理器,它的主要功能是决定如何处理 Logger 中的每一条消息,比如把消息输出到屏幕、文件或者 Email 中。

和 Logger 一样,Handler 也有级别的概念。如果一条日志记录的级别不匹配或者低于 Handler 的日志级别,则会被 Handler 忽略。

一个 Logger 可以有多个 Handler,每一个 Handler 可以有不同的日志级别。这样就可以根据消息的重要性不同,来提供不同类型的输出。例如,你可以添加一个 Handler 把 ERROR 和 CRITICAL 消息发到你的 Email,再添加另一个 Handler 把所有的消息(包括 ERROR 和 CRITICAL 消息)保存到文件里。

Filters

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

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

Formaters

Formatter 即格式化器,主要功能是确定最终输出的形式和内容。Formatter 通常由一个包含 LogRecord 属性 的 Python 格式化字符串组成;但是,您也可以编写自定义的 Formatter 来实现特定的格式化行为。

graph LR
A(日志)-->B(发生了什么:Logger)
B-->B1(记录消息,确定消息级别)
B-->B2(根据消息级别,确定是否需要处理)
B-->B3(把消息传递给消息处理器)
A-->C(消息如何处理:Handler)
C-->C1(决定如何处理消息,常见的有控制器/日志文件/邮件)
C-->C3(如果一条日志记录的级别不匹配或者低于Handler的日志级别,则会被 Handler 忽略)
A-->D(额外的控制:Filter)
D-->D1(例如:只允许某个特定来源的ERROR消息输出)
D-->D2(例如:当满足一定条件时,把日志级别从ERROR降到WARNING)
D-->D3(多个Filter可以链接起来使用,来做多重过滤操作)
A-->E(输出格式控制:Formater)
E-->E1(确定最终输出的形式和内容)

相关链接:
Django 的日志机制-1
Django 的日志机制-3
Django 的日志机制-4

请我喝杯咖啡吧~

支付宝
微信