==========================================================================
日志(logging)是一种可追踪(track)某些软件运行时所发生事件的方法。软件开发人员 可在他们的代码中调用日志记录相关的方法来表明发生了某些事件。通过一个描述性的消息来描述这个事件,该消息能够可选地包含可变数据。而
事件有重要性的概念,重要性被称为 严重性级别(Level)。
通过记录和分析日志可以了解一个系统 或软件程序运行情况是否正常,也可以在应用程序出现故障时快速定位问题。例如:开发者可通过在控制台上输出的各种日志进行程序调试;运维人员在接收到报警或各种问题反馈后,进行问题排查时通常都会先看各种日志,大部分问题都可在日志中找到答案。日志的作用可总结为3点:
-
1、程序调试
-
2、了解软件程序运行情况,是否正常
-
3、软件程序运行故障分析与问题定位
日志的级别有很多,我们一般只用四个,日志级别由低到高DEBUG - INFO - WARN - ERROR
;
-
DEBUG(调试):开发调试日志。一般来说,在系统实际运行过程中,不会输出该级别的日志。因此,开发人员可以打印任何自己觉得有利于了解系统运行状态的东东。不过很多场景下,过多的DEBUG日志,并不是好事,建议是按照业务逻辑的走向打印。打个比方,打印日志就像读书时划重点,如果导出都是重点,也就失去了重点。
-
INFO(通知):INFO日志级别主要用于记录系统运行状态等关联信息。该日志级别,常用于反馈系统当前状态给最终用户。所以,在这里输出的信息,应该对最终用户具有实际意义,也就是最终用户要能够看得明白是什么意思才行。
-
WARN(警告):WARN日志常用来表示系统模块发生问题,但并不影响系统运行。 此时,进行一些修复性的工作,还能把系统恢复到正常的状态。
-
ERROR(错误):此信息输出后,主体系统核心模块正常工作,需要修复才能正常工作。 就是说可以进行一些修复性的工作,但无法确定系统会正常的工作下去,系统在以后的某个阶段,很可能会因为当前的这个问题,导致一个无法修复的错误(例如宕机),但也可能一直工作到停止也不出现严重问题。
一条日志信息对应的是 一个事件的发生,而一个事件通常需要包括以下内容:
-
1、发生时间
-
2、发生位置
-
3、严重程度,即 日志级别
-
4、内容
上述都是一条日志记录中可能包含的字段信息。还可能包括一些其他信息,如进程ID、进程名称、线程ID、线程名称等。
日志格式是用来定义一条日志记录中包含哪些字段的,而且日志格式通常是可以自定义的。
PS:输出一条日志时,日志内容、日志级别是需要开发人员明确指定的。对于其他字段信息,只需要是否显示在日志中即可。
在Python中,提供了一个用于记录日志,功能强大、使用简单的标准库模块
logging
。
===============================================================================
在部署项目时,不可能直接将所有的信息都输出到控制台中,我们可以将这些信息记录到日志文件中,这样不仅方便我们查看程序运行时的情况,logging模块提供了在项目出现故障时根据运行时产生的日志快速定位问题出现位置的功能。
import logging
问题思考:
-
开发人员在开发一个应用程序时需要什么日志信息?在程序正式上线后需要什么日志信息?
-
运维人员在部署开发环境时需要什么日志信息?在部署生产环境时需要什么日志信息?
根据需求选择不同的日志级别:
| 级别 | 级别数值 | 使用时机 |
| — | — | — |
| DEBUG | 10 (级别最低) | 详细信息,常用于调试。 |
| INFO | 20(重要) | 程序正常运行过程中产生的一些信息。 |
| WARNING | 30 (警告) | 警告用户,虽然程序还在正常工作,但有可能发生错误。 |
| ERROR | 40(错误) | 由于更严重的问题,程序已经不能执行一些功能了。 |
| CRITICAL | 50 (严重) | 严重错误,程序已经不能继续运行。 |
默认情况是日志级别是warning,日志级别从上到下依次升高,即 DEBUG < INFO < WARNING < ERROR < CRITICAL
。而日志的信