内容来自官方文档,版本python3.x。
介绍
这是一个为应用和库提供事件日志的模块,所有python模块都可以使用这个标准库作为日志API。
logging模块包含4个基础类(对象):
- Logger类,暴露可以给应用直接使用的接口。
- Handler类,发送日志纪录(创建自Loggers对象)到目标。
- Filter类,决定日志纪录输出的更细颗粒度的处理器。
- Formatter类,指定日志纪录最终输出的格式。
Logger对象
不要直接实例化Logger,而是通过模块级函数logging.getLogger(name)返回Logger对象。
部分属性和方法
setLevel(level)
设置日志等级,日志严重程度低于这个等级的不会被记录。
debug(msg, *args, **kwargs)
输出一条DEBUG等级的日志纪录。
info(msg, *args, **kwargs)
输出一条INFO等级的日志纪录。
warning(msg, *args, **kwargs)
输出一条WARNING等级的日志纪录。
error(msg, *args, **kwargs)
输出一条ERROR等级的日志纪录。
Logging Levels
| Level | Numeric value |
| CRITICAL | 50 |
| ERROR | 40 |
| WARNING | 30 |
| INFO | 20 |
| DEBUG | 10 |
| NOTSET | 0 |
Handler对象
不要直接实例化Handler,这个对象是很多有用的子类的基础。
部分属性和方法
__init__(level=NOTSET)
Formatter对象
Formatter对象的属性和方法负责把LogRecord转换成string,可以格式化日志输出,通常在Formatter初始化的时候会指定格式。
实例化:logging.Formatter(fmt=None, datefmt=None, style='%')
部分属性和方法
format(record)
formatTime(record, datefmt=None)
Filter对象
Filter对象可以被Handlers 和 Loggers使用,用于比日志等级更复杂的过滤。
实例化: logging.Filter(name='')
LogRecord对象
当Logger产生日志事件的时候,LogRecord对象会被自动创建;也可以手动通过makeLogRecord()创建。
从3.2版本开始,创建LogRecord可以通过工厂方法getLogRecordFactory() 和 setLogRecordFactory(),工厂方法可以提供更多的配置。
# 在LogRecord被创建的时候注入一个自定义的值
old_factory = logging.getLogRecordFactory()
def record_factory(*args, **kwargs):
record = old_factory(*args, **kwargs)
record.custom_attribute = 0xdecafbad
return record
logging.setLogRecordFactory(record_factory)
下面显示一个例子,来自cookbook:
import logging
# 模拟一些东西,用于演示logging的作用
action = ''
def do_something(a):
action = a
# 创建一个logger对象
logger = logging.getLogger('spam_application')
logger.setLevel(logging.DEBUG)
# 创建一个文件处理器来记录日志
fh = logging.FileHandler(r'C:\Users\lipei\Desktop\spam.log')
fh.setLevel(logging.DEBUG)
# 创建一个控制台处理器来显示比DEBUG更高级的ERROR的日志
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
# 创建formatter,并把formatter加入处理器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# 把处理器加入logger对象
logger.addHandler(fh)
logger.addHandler(ch)
# 产生INFO等级的日志消息
# INFO等级的日志消息的日志消息会被记录到spam.log中,因为INFO比DEBUG高级
logger.info('做一些事情之前')
do_something('say')
logger.info('说了一些话')
do_something('running')
logger.info('跑步中')
do_something('working')
logger.info('在工作')
do_something('sleep')
logger.info('结束一天')
# 产生ERROR等级的日志消息
# ERROR比DEBUG、INFO都高级,所以会记录到spam.log和输出到控制台
logger.error('我就是想显示一条错误日志消息')
运行这个程序,看控制台的输出:
C:\Users\lipei\Desktop>python test.py
2020-04-26 10:51:53,280 - spam_application - ERROR - 我就是想显示一条错误日志消息
再看日志文件的输出:

本文介绍了Python标准库中的logging模块,用于应用程序和库的事件日志。它包括Logger、Handler、Formatter和Filter四个核心类。Logger是主要的接口,Handler负责将日志发送到目标,Formatter定义日志输出格式,Filter提供了更精细的日志过滤。通过实例演示了如何使用这些类进行日志记录。
6714

被折叠的 条评论
为什么被折叠?



