许多应用程序中都会有日志模块,用于记录系统运行过程中的一些关键信息,以便对系统的运行状况进行跟踪。在.NET平台有著名的第三方开源日志组建log4net,C++中有log4cpp,Java中有log4j,在python中有logging。本模块支持将日志信息保存到不同的目标域中。如保存到日志文件中,以邮件形式发送日志信息;以httpget或者post的方式提交日志到web服务器;以windows事件的形式记录等等,这些日志保存方式可以组合使用,每种方式可以设置自己的日志级别以及日志格式。

1、四个主要的组件

logger:日志类,应用程序往往通过调用它提供的API来记录日志;

handler:对日志信息处理,可以将日志发送(保存)到不同的目标域中;

filter:对日志信息进行过滤;

formatter:日志的格式化。

2、日志级别

在记录日志时,日志消息都会关联一个级别(本质是一个非负整数),系统默认提供了6个级别,分别是:

CRITICAL       50

ERROR          40

WARNING        30

INFO           20

DEBUG          10

NOTSET         0

可以给日志对象(Logger Instance)设置日志级别,低于该级别的日志消息将会被忽略,也可以给Handler设置日志级别,低于该级别的日志信息,Handler也会忽略。

logging模块中的常用函数:

logging.basicConfig(参数)

作用是为日志模块设置基本信息。后面参数有:

1)filename:日志文件的目录全称,也就是包含有准确路径的文件名。如filename="/home/log/log1.txt",最后会把日志信息打到此文件中。

2)filemode:日志文件的打开模式,默认是'a',表示日志消息以追加的形式添加到日志文件中。如果设置成'w',那么每次程序启动的时候都会创建一个新的日志文件。

3)format:设置日志输出格式。

4)datefmt:设置日期格式。

5)level:设置日志的级别,对于低于该级别的日志消息将会忽略。如level=logging.INFO。

6)stream:设置特定的流用于初始化StreamHandle。

例子:

   
   
   
   
  1. import logging 
  2.  
  3. LOG_FILENAME = "e:\log_test.txt" 
  4. logging.basicConfig(filename=LOG_FILENAME, level=logging.DEBUG) 
  5. logging.debug("This message should go to the log file"

运行结果:

python日志管理模块logging_第1张图片

再运行一次

python日志管理模块logging_第2张图片

可以看出运行的日志都写到这个日志文件中了,每运行一次就会多一行。如果在filename和level中间插入filemode='w',那么每次运行日志文件中只有一行。这个在调试脚本的时候很有用,每次日志里的信息都是本次运行的过程,每改一次脚本就有一个新日志,那么把每次运行的日志文件拿到一起对比一下就能看出每次的改动到底有没有效果。

假如设置level=logging.WARNING,需要打印的消息有

logging.error("......")

logging.warning("......")

logging.info("......")

logging.debug("......")

那么运行的时候只有前两句会被打印,后面的不打印,因为它们的级别低于WARNING。