如何在 Express.js 中进行日志处理?

阅读时长 8 分钟读完

引言

在开发 Web 应用程序时,日志处理是不可或缺的一项工作,以便开发人员更好地了解应用程序的运行状态和错误信息。而在 Node.js 服务器端框架中,Express.js 可谓当仁不让的首选。

本文将重点介绍如何在 Express.js 中进行日志处理,让你更好的掌握日志处理技巧。

快速入门

在 Express.js 中,我们可以使用如下代码段来处理日志信息:

-- -------------------- ---- -------
----- ------- - -------------------
----- ------ - ------------------
----- --- - ----------

-----------------------

-- ------
-- ---

---------------- -- -- -
  ------------------- ------- -- ---- -------
---

在以上代码中,我们使用了 morgan 中间件来输出日志信息。

接下来,我们详细了解 morgan 中间件的实现原理。

Morgan 中间件

morgan 是一个 Node.js 中间件,用于在控制台或日志文件中输出 HTTP 请求的信息。它提供了多种格式化日志信息的方式,便于开发人员对输出信息进行处理和分析。

安装

我们可以通过 npm 安装 morgan:

使用方式

安装完 morgan 之后,我们可以通过下面几种方式使用它:

使用默认设置

我们可以使用 morgan 的默认设置来输出日志信息。

-- -------------------- ---- -------
----- ------- - -------------------
----- ------ - ------------------
----- --- - ----------

-- ------
-----------------------

-- ------
-- ---

---------------- -- -- -
  ------------------- ------- -- ---- -------
---

在上面的示例中,我们调用了 morgan 函数,并将其返回的中间件传递给了 Express.js 的 app.use 方法。使用 dev 作为参数调用 morgan 方法,将使用默认设置输出日志信息。

默认情况下,这将在控制台上输出类似如下的信息:

这条记录告诉我们,某个客户端使用 GET 方法访问了服务器上的某个资源,并在 54 毫秒之后成功响应 200 状态码和 2739 字节的数据。

定制输出格式

我们还可以自定义日志输出格式。

-- -------------------- ---- -------
----- ------- - -------------------
----- ------ - ------------------
----- --- - ----------

-- ------
---------------------- ----- ---- -- -
  ------ ------- ---------
---
----------------------- ---- ------------

-- ------
-- ---

---------------- -- -- -
  ------------------- ------- -- ---- -------
---

在上面的示例中,我们使用 morgan.token API 定义了一个自定义的格式化函数 custom,将这个函数的返回值输出到日志信息中。然后,我们在调用 morgan 中间件时使用 :method, :url::custom 来定义日志格式。

输出方式

在 Express.js 中,我们可以使用多种方式输出日志信息:

  • 在控制台上输出
  • 将日志信息写入文件
  • 将日志信息发送到远程日志分析服务

在使用 morgan 中间件时,我们可以通过更改传递给它的信息处理程序,将数据输出到不同的目标位置。

在控制台上输出

这是 morgan 默认使用的方法。在控制台中查看日志信息,使用 devshorttinycombined 等字符串作为参数即可。不同的字符串代表不同的输出方式,如下表所示:

值名称 说明
combined 标准 Apache combined 日志格式
common 标准 Apache common 日志格式
dev 开发模式下的简洁输出样式
short 包含日期、状态码等简洁输出格式
tiny 非常简洁的输出格式,仅包含 HTTP 方法、URL 和状态码

写入日志文件

我们可以将日志信息写入文件,以便在出现问题时查找错误信息。使用 fs 模块创建和写入日志文件即可。

-- -------------------- ---- -------
----- ------- - -------------------
----- ------ - ------------------
----- -- - --------------
----- ---- - ----------------
----- --- - ----------

-- ------
----- ------ - -------------------- --------
-- ------------------------ -
  ---------------------
-

-- ------
----- -------- - ----------------- --------------
----- --------------- - ------------------------------ - ------ --- ---

-- ---------
-------------------------- - ------- --------------- ----

-- ------
-- ---

---------------- -- -- -
  ------------------- ------- -- ---- -------
---

在上面的示例中,我们创建了一个文件流来写入日志文件,并将其传递给 morgan 中间件。传递 { stream: accessLogStream } 选项即可将输出信息重定向到日志文件。

发送到远程日志分析服务

最后,我们可以将日志信息发送到日志分析服务,例如使用 Elasticsearch、Logstash 和 Kibana 进行分析和监控。

我们可以使用一个专门的 morgan 流插件将日志转发到远程服务器。

-- -------------------- ---- -------
----- ------- - -------------------
----- ------ - ------------------
----- ------------- - -------------------------
----- ------ - ------------------
----- --- - ----------

-- --- ------------- --
----- ------ - --- ---------------------- ----- ---------------- ---

-- -----
----- -------- - --- ------------------
--------------- - ------- ---- ----- -- -
  ----- ---- - -----------------------------
  --------------
    ------ --------------
    ----- -------------
    ----
  -- ----- ----- -- -
    -- ----- -
      -------------------
    -
  ---
  -------
--

-- ------- -------------
-------------------------- - ------- -------- ----

-- ------
-- ---

---------------- -- -- -
  ------------------- ------- -- ---- -------
---

在上面的示例中,我们创建了一个流插件,它将日志信息转发到 Elasticsearch 集群中的索引 access-logs。在重定向输出时使用这个插件即可实现将日志信息发送到远程日志服务的目的。

总结

本文详细介绍了如何在 Express.js 中进行日志处理,特别介绍了 morgan 中间件的使用方法,以及如何将日志信息输出到不同的目标位置。希望本文对大家在开发 Web 应用程序时进行日志处理有所帮助。

参考文献

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f8acd5f6b2d6eab3092945

纠错
反馈