Python 写日志文件

  日志文件是记录程序操作及事件的记录文件或记录文件的集合。一般由程序开发人员编写,开发、运维人员共同使用,开发人员可以通过日志调试程序,运维人员通过日志检查程序近期是否正常运行,如果出现异常,则可通过日志快速定位问题。因此,用日志记录程序流程,事件,以及异常时的详细信息非常重要,尤其是对于部署在客户场地的程序。另外,日志有时也用于记录用户操作、程序运行地理位置等跟踪信息,用于后台的用户研究和数据挖掘。

  日志文件需要详细、清晰、且具有高可读性,以便减少开发与运维人员后期的沟通成本,有时候我们也使用程序来检测和分析日志,因此,定义关键字和格式也很重要。

 Python 使用 logging 工具管理日志,日志可以在终端显示,也可以记录成文件,每条日志都用级别号标志其严重程度,一般通过级别过滤选择性地记录和显示日志,级别定义如表 5-1 所示:

(谢彦技术博客)

  本例展示了以屏幕输出和文件输出两种方式记录日志信息,日志文件为当前目录下的 log.txt,格式为文本文件。例程中设置了三次日志级别,第一次对程序中所有日志设置,级别为 DEBUG,即显示全部日志,第二次设置日志文件的级别为 INFO,它将 INFO 及 INFO 以上的日志记录在文件中,第三次是设置屏幕显示日志级别为 WARNING,相当于先用第一次设置的 DEBUG 过滤一遍,再用 WARNING 过滤一遍,最终输出的是 WARNING 及以上的日志信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import logging

# 获取logger对象,取名mylog
logger = logging.getLogger("mylog")
# 输出DEBUG及以上级别的信息,针对所有输出的第一层过滤
logger.setLevel(level=logging.DEBUG)

# 获取文件日志句柄并设置日志级别,第二层过滤
handler = logging.FileHandler("log.txt")
handler.setLevel(logging.INFO)

# 生成并设置文件日志格式,其中name为上面设置的mylog
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

# 获取流句柄并设置日志级别,第二层过滤
console = logging.StreamHandler()
console.setLevel(logging.WARNING)

# 为logger对象添加句柄
logger.addHandler(handler)
logger.addHandler(console)

# 记录日志
logger.info("show info")
logger.debug("show debug")
logger.warning("show warning")

(谢彦技术博客)

  需要注意的是程序用 addHandler 函数添加了两个句柄,一个用来显示输出,一个用来记录日志文件,之后输出的 log 信息会通过句柄调用对应的输出,同一个输出如果 addHandler 多次,又没有 removeHandler,同一条日志就会被记录多次。因此注意不要重复调用,尤其在用 Jupyter Notebook 调试时,不要重复运行该代码段。

转载请注明出处:https://www.jianshu.com/p/10d81d4fb050