---
title: "evlog 与 Winston：格式和请求事件"
description: "比较 Winston 的格式、transports 和自定义级别，以及迁移现有应用前 evlog 的事件累积方式"
canonical_url: "https://evlog.zhcndoc.com/compare/winston"
---
# evlog 与 Winston：格式和请求事件

> 比较 Winston 的格式、transports 和自定义级别，以及迁移现有应用前 evlog 的事件累积方式

你的 Winston 配置可能编码了多年的运维决策：哪些字段会到达后端、哪些错误会触发告警，以及每个严重性级别会发送到哪些 transports。开始迁移时，应保留这些决策。

## 快速比较

<table>
<thead>
  <tr>
    <th>
      
    </th>
    
    <th>
      Winston
    </th>
    
    <th>
      evlog
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      核心模型
    </td>
    
    <td>
      每次调用都会通过格式链将一个 <code>
        info
      </code>
      
       对象写入一个或多个 transport
    </td>
    
    <td>
      单独的结构化日志，以及累积字段并发出一个事件的操作日志记录器
    </td>
  </tr>
  
  <tr>
    <td>
      输出整形
    </td>
    
    <td>
      可组合的 <code>
        logform
      </code>
      
       格式（<code>
        combine
      </code>
      
      、<code>
        json
      </code>
      
      、<code>
        printf
      </code>
      
      、自定义格式）
    </td>
    
    <td>
      由应用、插件和增强器设置事件字段，然后由 drain 序列化
    </td>
  </tr>
  
  <tr>
    <td>
      目标位置
    </td>
    
    <td>
      内置 Console、File 和 Http transport，以及社区 transport
    </td>
    
    <td>
      Axiom、OTLP、Sentry、PostHog、Datadog 和 Better Stack 等 drain 适配器
    </td>
  </tr>
  
  <tr>
    <td>
      级别
    </td>
    
    <td>
      默认使用 npm 级别（<code>
        error
      </code>
      
       到 <code>
        silly
      </code>
      
      ），也可以自定义级别
    </td>
    
    <td>
      固定严重性级别，广泛事件支持采样
    </td>
  </tr>
  
  <tr>
    <td>
      进程失败
    </td>
    
    <td>
      <code>
        exceptionHandlers
      </code>
      
       和 <code>
        rejectionHandlers
      </code>
    </td>
    
    <td>
      请求错误会变成结构化错误事件；进程处理程序仍由你选择
    </td>
  </tr>
  
  <tr>
    <td>
      其他功能
    </td>
    
    <td>
      某些 transport 支持性能分析、查询和日志流
    </td>
    
    <td>
      带有 <code>
        why
      </code>
      
      、<code>
        fix
      </code>
      
       和 <code>
        link
      </code>
      
       的结构化错误
    </td>
  </tr>
</tbody>
</table>

来源：[Winston README](https://github.com/winstonjs/winston#readme) 中关于格式、日志级别、transport、异常、拒绝和性能分析的章节。

## 确定配置已经实现的功能

Winston 通过 `logform` 组合格式，支持自定义级别，并配置各自拥有级别的多个 transports。它还提供子 logger、性能分析以及异常／拒绝处理器。当现有管道已经正常工作时，这些都是保留它的理由。请参阅 [Winston 文档](https://github.com/winstonjs/winston)。

<table>
<thead>
  <tr>
    <th>
      现有要求
    </th>
    
    <th>
      在 evlog 中检查的内容
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      自定义级别
    </td>
    
    <td>
      将它们映射到四种严重性级别，并更新依赖原始值的查询或告警。
    </td>
  </tr>
  
  <tr>
    <td>
      格式链
    </td>
    
    <td>
      确定哪些转换应成为上下文字段、插件钩子或 drain 序列化。
    </td>
  </tr>
  
  <tr>
    <td>
      自定义 transport
    </td>
    
    <td>
      找到匹配的 drain，或移植该协议和交付行为。
    </td>
  </tr>
  
  <tr>
    <td>
      每个 transport 的级别
    </td>
    
    <td>
      在交付配置中明确保留特定目标的过滤逻辑。
    </td>
  </tr>
  
  <tr>
    <td>
      异常／拒绝处理器
    </td>
    
    <td>
      将进程级故障处理与单个请求的错误事件分开。
    </td>
  </tr>
</tbody>
</table>

## 决定由谁组装最终事件

Winston 可以一次记录一个已完成的对象。应用决定如何收集它。evlog 的 `createLogger()` 提供该累加器，`set()` 添加上下文，而 `emit()` 生成最终事件。框架集成负责管理该操作生命周期。

使用 [Wide Events](https://evlog.zhcndoc.com/learn/wide-events) 来决定这种模型是否能减少处理器中的代码。它不会自动保留 Winston 的输出 schema，将多条记录改为一条记录可能需要新的仪表板查询。

## 通过可观测检查点进行迁移

选择一个操作，并记录消费者所需的输出字段。配置 evlog [drain 适配器](https://evlog.zhcndoc.com/integrate/adapters/overview)，然后针对测试目标验证成功和失败场景。确认脱敏、严重性映射、重试和进程关闭满足与现有路径相同的要求。

如果格式组合或自定义 transports 已经解决了问题，请继续使用 Winston。当累积的上下文、结构化错误及其集成生命周期能够减少应用代码时，可以考虑 evlog。无论库的年龄，还是输出不相等的基准测试，都不能证明哪个更适合你的工作负载。[性能参考](https://evlog.zhcndoc.com/reference/performance)解释了可供比较的测量结果。

## 常见问题

**evlog 是 Winston 的直接替代品吗？**
不是。调用签名、级别和输出封装都不同。请围绕仪表板和告警依赖的字段规划迁移。

**可以保留 Winston 并添加 evlog 吗？**
可以。一种常见的拆分方式是让现有 transport 继续使用 Winston，在新路由上采用 evlog 请求事件，只要两者不会将相同记录转发到同一个后端即可。

**哪个更快？**
本页面不对性能作出声明。请按照[性能参考](https://evlog.zhcndoc.com/reference/performance)中的说明，在自己的工作负载和等价输出下比较两者。

在扩大迁移范围之前，使用 [日志记录器概览](https://evlog.zhcndoc.com/reference/vs-other-loggers)比较其他选项。

---

- [Logger 概览](https://evlog.zhcndoc.com/reference/vs-other-loggers)


## Sitemap

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