---
title: "evlog 与 Consola：报告器和请求上下文"
description: "在终端交互或自定义报告器方面继续使用 Consola；当应用需要累积请求事件时，评估 evlog。"
canonical_url: "https://evlog.zhcndoc.com/compare/consola"
---
# evlog 与 Consola：报告器和请求上下文

> 在终端交互或自定义报告器方面继续使用 Consola；当应用需要累积请求事件时，评估 evlog。

Nuxt 应用可能同时需要可读的终端消息，以及能够到达日志后端的请求事件。Consola 和 evlog 通过不同的 API 满足这些需求。先从输出目标以及负责维护传递代码的一方入手。

## 快速比较

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

<tbody>
  <tr>
    <td>
      主要用途
    </td>
    
    <td>
      为 Node.js、浏览器和 CLI 提供可读的控制台输出，也是 Nuxt Kit <code>
        useLogger
      </code>
      
       背后的日志记录器
    </td>
    
    <td>
      将结构化日志和请求事件交付到日志后端
    </td>
  </tr>
  
  <tr>
    <td>
      输出
    </td>
    
    <td>
      默认使用 fancy reporter，CI 和测试使用 basic reporter，浏览器使用 browser reporter；<code>
        consola/basic
      </code>
      
       和 <code>
        consola/browser
      </code>
      
       构建更小
    </td>
    
    <td>
      开发环境输出美化文本，生产环境输出 JSON 事件
    </td>
  </tr>
  
  <tr>
    <td>
      扩展点
    </td>
    
    <td>
      实现 <code>
        log(logObject)
      </code>
      
       的 reporter
    </td>
    
    <td>
      插件、增强器和 drain 适配器
    </td>
  </tr>
  
  <tr>
    <td>
      上下文
    </td>
    
    <td>
      <code>
        withTag()
      </code>
      
       和 <code>
        withDefaults()
      </code>
      
       为记录设置作用域
    </td>
    
    <td>
      <code>
        set()
      </code>
      
       在操作日志记录器上累积字段，直到 <code>
        emit()
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      CLI 辅助功能
    </td>
    
    <td>
      <code>
        prompt()
      </code>
      
      （由 clack 提供）、<code>
        wrapConsole()
      </code>
      
       / <code>
        wrapStd()
      </code>
      
      、暂停/恢复、重复日志节流
    </td>
    
    <td>
      无。终端交互继续使用 Consola
    </td>
  </tr>
  
  <tr>
    <td>
      级别
    </td>
    
    <td>
      数字级别（默认为 <code>
        3
      </code>
      
      ），可通过 <code>
        level
      </code>
      
       选项或 <code>
        CONSOLA_LEVEL
      </code>
      
       配置
    </td>
    
    <td>
      固定严重性级别，广泛事件支持采样
    </td>
  </tr>
</tbody>
</table>

来源：[Consola README](https://github.com/unjs/consola#readme) 和 [Nuxt Kit 日志文档](https://nuxt.com/docs/api/kit/logging)。

## 保留你所依赖的报告器行为

Consola 报告器接收日志对象，并控制渲染或传递。自定义报告器可以序列化 JSON 并转发记录，因此即使默认未包含 JSON 报告器，也可以实现结构化输出。Consola 还提供标签、控制台包装和提示辅助工具。暂停的日志会排队，重复消息可以进行节流。请参阅 [Consola 文档](https://github.com/unjs/consola)。

这些行为可能适用于 CLI 或生产应用。替换它们需要的不只是更改导入。

## 比较应用工作

<table>
<thead>
  <tr>
    <th>
      需求
    </th>
    
    <th>
      evlog 方式
    </th>
    
    <th>
      迁移问题
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      跨请求的上下文
    </td>
    
    <td>
      <code>
        set()
      </code>
      
       在操作日志记录器上累积字段
    </td>
    
    <td>
      哪些层会添加字段，以及谁会完成事件？
    </td>
  </tr>
  
  <tr>
    <td>
      输出到后端
    </td>
    
    <td>
      Drain 适配器和管道配置
    </td>
    
    <td>
      适配器是否保留了当前报告器实现的协议？
    </td>
  </tr>
  
  <tr>
    <td>
      单条消息
    </td>
    
    <td>
      全局结构化日志 API
    </td>
    
    <td>
      哪些调用签名和字段需要更改？
    </td>
  </tr>
  
  <tr>
    <td>
      终端交互
    </td>
    
    <td>
      日志输出
    </td>
    
    <td>
      提示和其他 CLI 交互是否应继续由 Consola 处理？
    </td>
  </tr>
</tbody>
</table>

Consola 标签限定记录的范围。evlog 操作日志记录器会累积上下文，直到发出事件。这些是不同的契约，因此只有在能够保留你查询或显示它们的方式时，才应将标签映射到应用字段。

## 在有帮助的地方采用请求事件

在应用中，将终端交互与请求插桩分开。为处理程序选择 evlog 框架集成，并在贡献字段的各层中使用 `useLogger()`。除非有意进行重复摄取，否则也不要通过自定义报告器捕获这些已发出的记录并将其转发到同一目标。

对于 CLI，[Standalone TypeScript 指南](https://evlog.zhcndoc.com/integrate/frameworks/standalone)介绍了显式初始化和待处理传递。对于处理程序，[Wide Events](https://evlog.zhcndoc.com/learn/wide-events)解释了何时进行累积和发出。在替换自定义传递报告器之前，请查看[Drain 适配器](https://evlog.zhcndoc.com/integrate/adapters/overview)。

## 常见问题

**Nuxt 已经使用 Consola。在 Nuxt 应用中还需要 evlog 吗？**
Nuxt Kit 的 `useLogger` 是用于模块和构建输出的 Consola 实例。当你希望每个服务器请求生成一个交付到后端的结构化事件时，请添加 [evlog Nuxt 模块](https://evlog.zhcndoc.com/integrate/frameworks/nuxt)。两者可以共存。

**Consola 可以发出 JSON 吗？**
可以，通过自定义 reporter 实现。Consola 不附带 JSON reporter（其[自定义 reporter 章节](https://github.com/unjs/consola#custom-reporters)展示了如何编写一个），因此交付、批处理和重试仍由你的代码负责。

当 Consola 的 reporter 和终端工作流满足你的需求时，请继续使用 Consola。当 evlog 的请求上下文、结构化错误和 drain 管道能够移除你原本需要维护的代码时，再添加或采用 evlog。有关其他配置模型，请参阅[日志记录器概览](https://evlog.zhcndoc.com/reference/vs-other-loggers)。

---

- [日志记录器概览](https://evlog.zhcndoc.com/reference/vs-other-loggers)


## Sitemap

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