< 返回版块

Yuan YQ 发表于 2025-03-26 09:15

Rust 日志框架基准测试

作者测试了 Rust 生态中常用的几种日志框架,主要是关注它们的性能差异。参与测试的框架有:

  • log 配合 env_logger: Rust 中标准的日志 Facade
  • tracing: 一个用于检测 Rust 程序以收集基于事件的结构化诊断信息的框架
  • slog: 为 Rust 提供的结构化、具上下文信息的、可扩展且可组合的日志记录功能
  • log4rs: 对标 Java log4jlogback 的高度可配置的日志框架
  • fern: 简单但是高效的日志实现
  • ftlog: 高性能的、零内存分配的日志框架

关键的测试结果摘要如下:

单条日志耗时(纳秒)对比

Logger 10 byte message 100 byte message 1000 byte message
env_logger 3640.22 13519.32 92334.04
fern 3888.57 11777.73 90513.74
ftlog 178.31 175.93 196.52
log4rs 3614.77 11868.81 91443.89
slog 73.04 73.53 91.77
tracing 8797.12 18502.08 98468.43

日志吞吐量对比(条/秒)

Logger 10 byte message 100 byte message 1000 byte message
env_logger 274708.51 73968.21 10830.24
fern 257163.79 84906.04 11048.05
ftlog 5608233.36 5684080.37 5088411.98
log4rs 276642.65 84254.46 10935.67
slog 13691341.61 13599441.75 10897043.22
tracing 113673.55 54047.97 10155.54

结论

  • 最快的日志记录器:根据基准测试结果,对于大多数常见用例而言,速度最快的日志记录器似乎是 slog。
  • 性能最稳定:ftlog 在不同消息大小和日志级别下表现出最为稳定的性能。
  • 最适合高吞吐量场景:slog 在高吞吐量的日志记录场景中展现出最佳性能。

最终,日志记录器的选择取决于你具体的需求。如果性能至关重要,这些基准测试结果或许能帮助你做出决策。然而,对于许多项目来说,这些差异可能微不足道,其他因素,比如易用性或功能集,可能更为重要。

Github 仓库:https://github.com/jackson211/rust_logger_benchmark

Tiny SSE: Server-Send Events 服务器

Tiny SSE 是一个轻量的支持 SSE 的服务器,采用 Rust 和 Lua 开发。它具有以下特性:

  • 灵活的消息处理 —— 可动态地对消息进行筛选、修改、重定向和重播。
  • 可靠的连接 —— 跟踪订阅者,支持重新连接,并维护会话状态。
  • 安全的访问控制 —— 实施身份验证、授权以及基于事件的限制措施。
  • 可定制的行为 —— 使用钩子函数以编程方式修改消息并管理订阅。

Github 仓库:https://github.com/benwilber/tinysse

官网:https://tinysse.com

apalis:一个用简单、可扩展的多线程后台作业和消息处理库

apalis 是一个用 Rust 编写的简单、可扩展的多线程后台作业和消息处理库。它具有以下特性:

  • 简单可预测的任务处理模型:任务处理程序只是一个异步函数,且无宏的 API 设计。
  • 依赖注入:任务处理程序采用熟悉的依赖注入方式,类似于 actixaxum
  • 集成 tower 生态:可以充分利用 tower 生态系统中的中间件、服务和实用工具。
  • 易于扩展:后端默认支持分布式,便于扩展。
  • 运行时无关:可以使用 tokiosmol 等不同的运行时。
  • 内置并发和并行:支持并发和并行处理任务。
  • 工人监控和优雅关闭:提供工人监控功能,并且支持优雅关闭。
  • API 暴露:能够轻松地通过 API 暴露任务和工人。
  • 持久化 Cron 作业:支持持久化 Cron 作业,并可将 Cron 作业分发到其他后端。
  • 可选的 Web 界面:提供可选的 Web 界面来管理作业。

Github 仓库:https://github.com/geofmureithi/apalis

--

From 日报小组 Yuan YQ

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页