围绕你想维护的代码和交付管道选择日志库。evlog 将单独的结构化日志与累积的请求事件、结构化错误、插件和 drain 适配器结合起来。其他库提供了不同的配置和扩展模型,这些模型可能已经适合你的应用程序。
为你的技术栈选择对比项
| 你需要决定的事项 | 从这里开始 | 迁移前评估 |
|---|---|---|
| Pino JSON 日志记录 | evlog 与 Pino 对比 | 子级绑定、序列化器、自定义级别、worker 传输、现有 HTTP 日志记录 |
| Winston 格式和传输 | evlog 与 Winston 对比 | 格式组合、每个传输的级别、自定义传输、异常处理 |
| Nuxt、Nitro 或 CLI 中的 Consola | evlog 与 Consola 对比 | 报告器、终端交互、输出格式、请求上下文 |
| 库或应用程序中的 LogTape | evlog 与 LogTape 对比 | 由使用者拥有的配置、类别、显式和隐式上下文、测试 |
| 现有的 OpenTelemetry Collector | evlog 与 OpenTelemetry | OTLP 日志、活动 span 关联、单独的采样策略 |
采用 evlog 会带来哪些变化
对于累积事件,应用程序代码会随着工作进展调用 set(),并在结束时发出事件。Wide Events 解释了这一生命周期。其他日志库也可以接收一个已完成的对象,因此区别在于库提供了哪些累积和生命周期代码。
全局 API 处理单独的消息。它的签名并不意味着 evlog 可以直接替代 Pino、Winston 或 Consola。使用简单日志记录检查调用位置和输出封装。
检查约束
| 关注点 | evlog 契约 |
|---|---|
| 严重性 | 四个级别:debug、info、warn、error |
| 过滤 | 单独日志使用全局 minLevel,宽事件使用采样 |
| 可扩展性 | 插件、增强器和 drain。Pino 序列化器和 Winston 格式需要显式移植。 |
| 脱敏 | 配置的路径和已识别的模式,生产环境中默认启用。不能保证识别出所有个人数据。 |
| 交付 | 选择适配器及其管道配置,然后在部署的运行时中处理待交付内容。 |
| 测试 | 使用 memory drain 捕获发出的事件,并断言必需字段。 |
当现有日志库的集成已经满足你的要求时,继续使用它是合理的。如果要迁移,请先保留仪表板和告警所使用的字段,然后验证成功、失败和关闭行为。
在相同工作负载上比较成本
性能基准介绍了仓库中不一致的输出配置,以及其历史对比的局限性。不要将这些测量结果转化为对日志库的通用排名。
对于部署,请选择一个drain 适配器。对于没有框架生命周期管理的脚本或库,请遵循独立 TypeScript。