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

引言

在开发 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


猜你喜欢

  • 在 ECMAScript 2017 (ES8) 中使用新的 Object.getOwnPropertyDescriptors 函数

    在 ECMAScript 2017 (ES8) 中,Object.getOwnPropertyDescriptors 是一个新的函数,它可以方便地获取一个对象所有属性的描述符,包括可枚举性、confi...

    1 年前
  • Hapi 框架的数据库迁移插件——knex.js 使用说明

    在开发应用的过程中,数据库迁移是一个常见的需求。它可以让我们轻松地管理应用程序的数据库结构。Hapi 是一个流行的 Node.js 应用程序框架,提供了一个叫做 knex.js 的数据库迁移插件,使得...

    1 年前
  • PM2-Cluster 多进程模式详解及使用方法

    在 Web 开发领域,随着用户量和业务量的不断增加,一台服务器可能会面临着无法承载访问量和并发量等问题。其中,单个进程的 Node.js 应用也面临着因为 CPU 利用率不足、内存占用过大等问题,导致...

    1 年前
  • 安装 PWA 时缓存文件失效的解决方法

    前言 在开发基于 PWA 技术的 web 应用时,我们使用 Service Worker 技术来缓存页面所需的静态资源,使得网页可以更快地加载。但是,在应用发布后,我们发现一些用户在安装应用时出现了缓...

    1 年前
  • 如何使用 Node.js 进行日志记录:保证应用程序的可靠性

    日志记录是任何应用程序开发中必不可少的一部分,它可以帮助开发人员了解应用程序运行时发生的问题或事件,并查找和解决它们。Node.js 的强大和灵活性使其成为开发人员首选的技术来进行日志记录。

    1 年前
  • 在 ECMAScript 2016 中使用 Object.assign 方法实现对象浅合并

    在前端开发中,经常需要将两个或多个对象合并为一个。在 ECMAScript 2016 中,加入了 Object.assign 方法可以实现对象的浅合并。 Object.assign 方法 Object...

    1 年前
  • Mongoose 中使用 populate 方法实现多表查询

    在使用 Mongoose 进行开发时,多表查询是必不可少的。Mongoose 提供了 populate 方法来时实现多表查询,它可以将一个 Schema 中的属性与其它 Schema 中的属性关联起来...

    1 年前
  • Cypress 如何与 Jenkins 集成使用

    Cypress 是一款流行的前端自动化测试工具,而 Jenkins 则是一个广泛使用的持续集成和持续交付工具。在实际应用中,将 Cypress 和 Jenkins 集成起来可以更好地完成自动化测试和持...

    1 年前
  • TypeScript 下使用 Functional Programming Styles 的技巧

    在目前的前端开发领域,函数式编程(Functional Programming)的思想越来越受到欢迎。使用函数式编程的方法能够让我们更好地组织代码,避免副作用引起的问题,提高代码的可读性,可维护性等等...

    1 年前
  • 探究神器 Vanilla JS 的性能优化秘密

    什么是 Vanilla JS Vanilla JS(纯 JavaScript)是指不依赖任何第三方框架或库,只使用原生 JavaScript 的开发方式。与使用 jQuery、React 或 Vue ...

    1 年前
  • LESS 中调试 CSS 样式的技巧分享

    在前端开发过程中,调试 CSS 样式是一项必不可少的技能。特别是在使用 LESS 等 CSS 预处理器的时候,由于其语法比较复杂,我们更需要一些有效的方法来调试样式问题。

    1 年前
  • CSS Grid 中如何使用 span 关键字控制单元格跨度

    CSS Grid 是一种用于创建网格布局的强大工具。通过使用 CSS Grid,前端开发人员可以更轻松地控制网页元素的位置和大小。而其中的 span 关键字能够使单元格跨越多个网格行或列,为布局和排版...

    1 年前
  • ES2020 中的新特性:可选参数 - chaining

    在 JavaScript 中,函数参数是可以选的。事实上,没有传递参数也是可以的。在 ES2020 中,新特性“可选参数 - chaining”被引入,是对函数参数可选性的一个增强。

    1 年前
  • Deno 如何进行 JSX 语法渲染

    在传统的前端开发中,JSX 是 React 中使用的语法,而现在,Deno 作为一个新的运行时环境,同样可以进行 JSX 语法渲染。 什么是 JSX? JSX 是一种在 JavaScript 中编写 ...

    1 年前
  • 解决 SASS 中继承时出现的问题

    SASS 是一种流行的 CSS 预处理器,它提供了许多功能和语法糖使得编写 CSS 更加方便和有趣。其中,继承(inheritance)是 SASS 中很重要的特性之一,它允许样式规则共享相同的属性和...

    1 年前
  • 如何使用 React Hook 实现酷炫动画效果

    随着 React Hook 在前端领域的普及,开发者可以使用 Hook 的函数式编程风格优雅地解决很多问题。其中包括动画效果的实现,本文将介绍如何使用 React Hook 实现酷炫动画效果。

    1 年前
  • RxJS 对比其他异步编程方案的优势

    前言 随着 Web 应用程序的复杂性和用户体验的提升,异步编程已经成为前端开发中不可或缺的一部分。传统的异步编程方案,如 Callback、Promise 等已经无法满足日益增长的业务需求。

    1 年前
  • ES9 之 Objects 的扩展

    在 ECMAScript 2018 (ES9) 版本中,新增了一些有关对象的扩展。这些扩展为前端开发提供了更加灵活和高效的开发方式。本文将主要介绍对象的三个重要扩展:对象扩展运算符、异步迭代器以及原型...

    1 年前
  • Material Design 中 Toolbar 的使用详解

    随着移动互联网的不断发展,作为前端开发人员,我们需要时刻关注最新的设计趋势和技术,以便更好地满足用户的需求。Material Design 是 Google 推出的一套设计规范,在许多 Google ...

    1 年前
  • 解决基于 Custom Elements 实现的组件无法正确嵌套的问题

    在前端开发中,组件化已经成为一种重要的技术手段。Custom Elements 是 Web Components 规范中最基础和核心的一部分,它允许开发者自定义 HTML 标签,将其封装成组件,并使用...

    1 年前

相关推荐

    暂无文章