---
title: "evlog 与其他日志库对比"
description: "根据上下文模型、可扩展性、输出和迁移成本选择日志库，然后查看与你当前技术栈相关的详细对比。"
canonical_url: "https://evlog.zhcndoc.com/reference/vs-other-loggers"
---
# evlog 与其他日志库对比

> 根据上下文模型、可扩展性、输出和迁移成本选择日志库，然后查看与你当前技术栈相关的详细对比。

围绕你想维护的代码和交付管道选择日志库。evlog 将单独的结构化日志与累积的请求事件、结构化错误、插件和 drain 适配器结合起来。其他库提供了不同的配置和扩展模型，这些模型可能已经适合你的应用程序。

## 为你的技术栈选择对比项

<table>
<thead>
  <tr>
    <th>
      你需要决定的事项
    </th>
    
    <th>
      从这里开始
    </th>
    
    <th>
      迁移前评估
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      Pino JSON 日志记录
    </td>
    
    <td>
      <a href="https://evlog.zhcndoc.com/compare/pino">
        evlog 与 Pino 对比
      </a>
    </td>
    
    <td>
      子级绑定、序列化器、自定义级别、worker 传输、现有 HTTP 日志记录
    </td>
  </tr>
  
  <tr>
    <td>
      Winston 格式和传输
    </td>
    
    <td>
      <a href="https://evlog.zhcndoc.com/compare/winston">
        evlog 与 Winston 对比
      </a>
    </td>
    
    <td>
      格式组合、每个传输的级别、自定义传输、异常处理
    </td>
  </tr>
  
  <tr>
    <td>
      Nuxt、Nitro 或 CLI 中的 Consola
    </td>
    
    <td>
      <a href="https://evlog.zhcndoc.com/compare/consola">
        evlog 与 Consola 对比
      </a>
    </td>
    
    <td>
      报告器、终端交互、输出格式、请求上下文
    </td>
  </tr>
  
  <tr>
    <td>
      库或应用程序中的 LogTape
    </td>
    
    <td>
      <a href="https://evlog.zhcndoc.com/compare/logtape">
        evlog 与 LogTape 对比
      </a>
    </td>
    
    <td>
      由使用者拥有的配置、类别、显式和隐式上下文、测试
    </td>
  </tr>
  
  <tr>
    <td>
      现有的 OpenTelemetry Collector
    </td>
    
    <td>
      <a href="https://evlog.zhcndoc.com/compare/opentelemetry">
        evlog 与 OpenTelemetry
      </a>
    </td>
    
    <td>
      OTLP 日志、活动 span 关联、单独的采样策略
    </td>
  </tr>
</tbody>
</table>

## 采用 evlog 会带来哪些变化

对于累积事件，应用程序代码会随着工作进展调用 `set()`，并在结束时发出事件。[Wide Events](https://evlog.zhcndoc.com/learn/wide-events) 解释了这一生命周期。其他日志库也可以接收一个已完成的对象，因此区别在于库提供了哪些累积和生命周期代码。

全局 API 处理单独的消息。它的签名并不意味着 evlog 可以直接替代 Pino、Winston 或 Consola。使用[简单日志记录](https://evlog.zhcndoc.com/learn/simple-logging)检查调用位置和输出封装。

## 检查约束

<table>
<thead>
  <tr>
    <th>
      关注点
    </th>
    
    <th>
      evlog 契约
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      严重性
    </td>
    
    <td>
      四个级别：<code>
        debug
      </code>
      
      、<code>
        info
      </code>
      
      、<code>
        warn
      </code>
      
      、<code>
        error
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      过滤
    </td>
    
    <td>
      单独日志使用全局 <code>
        minLevel
      </code>
      
      ，宽事件使用采样
    </td>
  </tr>
  
  <tr>
    <td>
      可扩展性
    </td>
    
    <td>
      插件、增强器和 drain。Pino 序列化器和 Winston 格式需要显式移植。
    </td>
  </tr>
  
  <tr>
    <td>
      脱敏
    </td>
    
    <td>
      配置的路径和已识别的模式，生产环境中默认启用。不能保证识别出所有个人数据。
    </td>
  </tr>
  
  <tr>
    <td>
      交付
    </td>
    
    <td>
      选择适配器及其管道配置，然后在部署的运行时中处理待交付内容。
    </td>
  </tr>
  
  <tr>
    <td>
      测试
    </td>
    
    <td>
      使用 memory drain 捕获发出的事件，并断言必需字段。
    </td>
  </tr>
</tbody>
</table>

当现有日志库的集成已经满足你的要求时，继续使用它是合理的。如果要迁移，请先保留仪表板和告警所使用的字段，然后验证成功、失败和关闭行为。

## 在相同工作负载上比较成本

[性能基准](https://evlog.zhcndoc.com/reference/performance)介绍了仓库中不一致的输出配置，以及其历史对比的局限性。不要将这些测量结果转化为对日志库的通用排名。

对于部署，请选择一个[drain 适配器](https://evlog.zhcndoc.com/integrate/adapters/overview)。对于没有框架生命周期管理的脚本或库，请遵循[独立 TypeScript](https://evlog.zhcndoc.com/integrate/frameworks/standalone)。

---

- [性能基准](https://evlog.zhcndoc.com/reference/performance)
- [简单日志记录](https://evlog.zhcndoc.com/learn/simple-logging)


## Sitemap

See the full [sitemap](https://evlog.zhcndoc.com/sitemap.md) for all pages.
