python基础 — Logging模块

Logging模块提供Logger、handler、filter、formatter。

Logger:记录器

1. 应用程序代码能直接调用日志接口。

2. Logger最常用的操作有两类:配置和发送日志消息。

3. 初始化 logger = logging.getLogger("endlesscode"),获取logger对象,getLogger()方法后面最好加上所要日志记录的模块名字,配置文件和打印日志格式

  中的%(name)s 对应的是这里的模块名字,如果不指定name则返回root对象。

4. logger.setLevel(logging.DEBUG),Logging中有NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL这几种级别,日志会记录设置级别以上的日志

5. 多次使用相同的name调用getLogger方法返回同一个looger对象;

handler:处理器

将(记录器产生的)日志记录(log record)发送至合适的目的地(destination),比如文件,socket等。

Handler常用的是StreamHandler和FileHandler,可以简单理解为一个是console和文件日志,一个打印在调试窗口上,一个记录在一个文件上

一个logger对象可以通过addHandler方法添加0到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。

filter:

过滤器,提供了更好的粒度控制,它可以决定输出哪些日志记录。

formatter:

格式化器,指明了最终输出中日志记录的布局。

指定日志记录输出的具体格式。

formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。

喜欢用这样的格式 '[%(asctime)s] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S'

Logging工作流程

logging模块使用过程

1. 第一次导入logging模块或使用reload函数重新导入logging模块,logging模块中的代码将被执行,这个过程中将产生logging日志系统的默认配置。

2. 自定义配置(可选)。logging标准模块支持三种配置方式: dictConfig,fileConfig,listen。其中,dictConfig是通过一个字典进行配置Logger,Handler,Filter,Formatter;

   fileConfig则是通过一个文件进行配置;而listen则监听一个网络端口,通过接收网络数据来进行配置。当然,除了以上集体化配置外,也可以直接调用Logger,Handler等对

   象中的方法在代码中来显式配置。

3. 使用logging模块的全局作用域中的getLogger函数来得到一个Logger对象实例(其参数即是一个字符串,表示Logger对象实例的名字,即通过该名字来得到相应的Logger对象实例)。

4. 使用Logger对象中的debug,info,error,warn,critical等方法记录日志信息。

logging模块处理流程

1. 判断日志的等级是否大于Logger对象的等级,如果大于,则往下执行,否则,流程结束。

2. 产生日志。第一步,判断是否有异常,如果有,则添加异常信息。第二步,处理日志记录方法(如debug,info等)中的占位符,即一般的字符串格式化处理。

3. 使用注册到Logger对象中的Filters进行过滤。如果有多个过滤器,则依次过滤;只要有一个过滤器返回假,则过滤结束,且该日志信息将丢弃,不再处理,

   而处理流程也至此结束。否则,处理流程往下执行。

4.  在当前Logger对象中查找Handlers,如果找不到任何Handler,则往上到该Logger对象的父Logger中查找;如果找到一个或多个Handler,则依次用Handler

    来处理日志信息。但在每个Handler处理日志信息过程中,会首先判断日志信息的等级是否大于该Handler的等级,如果大于,则往下执行(由Logger对象进入

    Handler对象中),否则,处理流程结束。

5. 执行Handler对象中的filter方法,该方法会依次执行注册到该Handler对象中的Filter。如果有一个Filter判断该日志信息为假,则此后的所有Filter都不再执行,

    而直接将该日志信息丢弃,处理流程结束。

6.  使用Formatter类格式化最终的输出结果。 注:Formatter同上述第2步的字符串格式化不同,它会添加额外的信息,比如日志产生的时间,产生日志的源代码

    所在的源文件的路径等等。真正地输出日志信息(到网络,文件,终端,邮件等)。至于输出到哪个目的地,由Handler的种类来决定。

猜你喜欢

转载自www.cnblogs.com/chen-jun552/p/12125205.html