Python-logging模块-快速入门

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容来自官方文档,版本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

LevelNumeric value
CRITICAL50
ERROR40
WARNING30
INFO20
DEBUG10
NOTSET0

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对象可以被HandlersLoggers使用,用于比日志等级更复杂的过滤。

实例化: 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 - 我就是想显示一条错误日志消息

再看日志文件的输出:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值