Python 日志模块 logging 详解

Java 中最通用的日志模块莫过于 Log4j 了,在 Python 中,也自带了 logging 模块,该模块的用法其实和 Log4j 类似。

Python 使用logging模块记录日志涉及四个主要类,使用官方文档中的概括最为合适:

logger提供了应用程序可以直接使用的接口;

handler将(logger创建的)日志记录发送到合适的目的输出;

filter提供了细度设备来决定输出哪条日志记录;

formatter决定日志记录的最终输出格式。

logging模块是在2.3新引进的功能,下面是一些常用的类和模块级函数

模块级函数
logging.getLogger([name]):返回一个logger对象,如果没有指定名字将返回root logger
logging.debug()、logging.info()、logging.warning()、logging.error()、logging.critical():设定root logger的日志级别
logging.basicConfig():用默认Formatter为日志系统建立一个StreamHandler,设置基础配置并加到root logger中

Logger

Python 日志模块 logging 详解

每个程序在输出信息之前都要获得一个Logger。Logger通常对应了程序的模块名,比如聊天工具的图形界面模块可以这样获得它的Logger:
LOG=logging.getLogger(”chat.gui”)
而核心模块可以这样:
LOG=logging.getLogger(”chat.kernel”)

Logger.setLevel(lel):指定最低的日志级别,低于lel的级别将被忽略。debug是最低的内置级别,critical为最高
Logger.addFilter(filt)、Logger.removeFilter(filt):添加或删除指定的filter
Logger.addHandler(hdlr)、Logger.removeHandler(hdlr):增加或删除指定的handler
Logger.debug()、Logger.info()、Logger.warning()、Logger.error()、Logger.critical():可以设置的日志级别
设置logger的level, level有以下几个级别:

Python 日志模块 logging 详解


NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL
如果把looger的级别设置为INFO, 那么小于INFO级别的日志都不输出, 大于等于INFO级别的日志都输出

Handlers
handler对象负责发送相关的信息到指定目的地。Python的日志系统有多种Handler可以使用。有些Handler可以把信息输出到控制台,有些Logger可以把信息输出到文件,还有些 Handler可以把信息发送到网络上。如果觉得不够用,还可以编写自己的Handler。可以通过addHandler()方法添加多个多handler
Handler.setLevel(lel):指定被处理的信息级别,低于lel级别的信息将被忽略
Handler.setFormatter():给这个handler选择一个格式
Handler.addFilter(filt)、Handler.removeFilter(filt):新增或删除一个filter对象

Formatters

Formatter对象设置日志信息最后的规则、结构和内容,默认的时间格式为%Y-%m-%d %H:%M:%S,下面是Formatter常用的一些信息

%(name)s

 

Logger的名字

 

%(levelno)s

 

数字形式的日志级别

 

%(levelname)s

 

文本形式的日志级别

 

%(pathname)s

 

调用日志输出函数的模块的完整路径名,可能没有

 

%(filename)s

 

调用日志输出函数的模块的文件名

 

%(module)s

 

调用日志输出函数的模块名

 

%(funcName)s

 

调用日志输出函数的函数名

 

%(lineno)d

 

调用日志输出函数的语句所在的代码行

 

%(created)f

 

当前时间,用UNIX标准的表示时间的浮 点数表示

 

%(relativeCreated)d

 

输出日志信息时的,自Logger创建以 来的毫秒数

 

%(asctime)s

 

字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒

 

%(thread)d

 

线程ID。可能没有

 

%(threadName)s

 

线程名。可能没有

 

%(process)d

 

进程ID。可能没有

 

%(message)s

 

用户输出的消息

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/7af9c15144cbe7536e3ec088adc05186.html