原文链接:http://www.juzicode.com/python-module-logbook
Logbook是Python的高性能日志记录库,提供比标准logging模块更简洁的API,支持上下文日志、多线程、异步IO等特性,适用于需要结构化日志输出的应用场景。
应用场景
- Web服务请求日志记录
- 多线程/异步任务追踪
- 结构化日志输出(JSON/XML)
- 日志文件自动轮转
- 上下文敏感日志(如请求ID)
- 实时日志监控系统
安装与导入
# juzicode.com/VX公众号:juzicode
pip install logbook
import logbook
使用方法
1、基础日志记录
创建基础日志记录器并输出不同级别日志信息。
# juzicode.com/VX公众号:juzicode
from logbook import Logger, StreamHandler, ERROR
import sys
handler = StreamHandler(sys.stdout, level=ERROR)
handler.push_application()
log = Logger('MyApp')
log.debug("这条不会显示") # 级别低于 ERROR,不显示
log.error("这条会显示!")
运行结果:
[2025-03-20 15:30:45.123] ERROR: MyApp: 这条会显示!
2、文件日志记录
配置日志输出到文件并自动创建目录结构。
# juzicode.com/VX公众号:juzicode
from logbook import FileHandler,Logger
FileHandler('app.log', bubble=True).push_application()
log = Logger('MyApp')
log.error("数据库连接失败")
运行结果:
# app.log内容
[2025-03-20 15:31:10.456] ERROR: MyApp: 数据库连接失败
3、日志格式化
自定义日志输出格式,包含进程ID和线程信息。
# juzicode.com/VX公众号:juzicode
from logbook import StreamHandler,Logger
import sys
log = Logger('MyApp')
format_string='{record.time}|{record.process}|{record.message}'
handler = StreamHandler(sys.stdout, format_string=format_string)
handler.push_application()
log.info("任务处理完成")
运行结果:
2025-03-20 15:32:01.789|12345|任务处理完成
4、异常日志记录
自动捕获并记录异常堆栈信息。
# juzicode.com/VX公众号:juzicode
from logbook import StreamHandler,Logger
import sys
handler = StreamHandler(sys.stdout)
handler.push_application()
log = Logger('MyApp')
try:
1 / 0
except Exception:
log.exception("发生算术异常")
运行结果:
[2025-03-20 15:34:15.678] ERROR: MyApp: 发生算术异常
Traceback (most recent call last):
File "E:\juzicode\py\logbook-test\1.py", line 5, in <module>
1 / 0
ZeroDivisionError: division by zero
5、按日期滚动日志
按时间或文件大小自动轮转日志文件。
# juzicode.com/VX公众号:juzicode
from logbook import TimedRotatingFileHandler,Logger
handler = TimedRotatingFileHandler('app.log',
date_format='%Y-%m-%d',
backup_count=7)
handler.push_application()
log = Logger('MyApp')
log.error("数据库连接失败")
运行结果:
生成app-2025-03-20.log等按日期滚动的日志文件
6、邮件报警
配置错误日志邮件通知功能。
# juzicode.com/VX公众号:juzicode
from logbook import MailHandler
mail_handler = MailHandler(
'Application Error',
['admin@example.com'],
server_addr=('smtp.example.com', 587),
credentials=('user', 'pass'),
secure=True
)
mail_handler.level = 'ERROR'
mail_handler.push_application()
运行结果:
发送邮件至admin@example.com(需配置有效SMTP服务器)
总结
Logbook为Python应用提供现代化日志解决方案:
- 简洁直观的API设计
- 支持上下文感知日志记录
- 高性能多线程/异步处理
- 灵活的输出格式和传输方式
注意事项:
- 生产环境需配置合理的日志轮转策略
- 避免在日志中记录敏感信息
- 与标准logging模块不兼容