Python轮子:logbook~灵活日志记录工具

原文链接: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模块不兼容

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注