Express.js 如何记录日志

在 Web 应用程序开发中,记录日志是非常重要的。它可以帮助我们了解应用程序的运行情况,诊断问题并调试代码。在 Express.js 中,可以使用 MorganWinston 两个流行的库来记录日志。

使用 Morgan(HTTP 请求日志)

Morgan 是一个 HTTP 请求日志中间件,可以记录 HTTP 请求的详细信息,例如请求方式、URL、状态码、响应时间等。使用它非常简单,只需要安装和配置即可。

安装

使用 npm 通过以下命令安装 Morgan:

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

使用

在应用程序中使用 Morgan,只需要调用 morgan 函数并将其作为 Express 中间件使用即可。以下是一个使用 Morgan 记录 HTTP 请求日志的示例:

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

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

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

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

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

上面的示例中,我们在 app.use 中使用了 morgan('combined') 作为 Express 中间件。这里的 combined 是一个预定义的格式,它会记录所有 HTTP 请求的详细信息,并以 Apache Combined Log Format 的形式输出。

Morgan 支持许多预定义的格式,并允许您自定义输出格式。您可以在 Morgan 文档 中找到更多信息。

使用 Winston(应用程序日志)

Winston 是一个非常流行的 Node.js 日志库,它支持多种日志传输和存储,包括文件、控制台、数据库等。在 Express.js 中,我们可以使用 Winston 来记录应用程序日志。

安装

请使用以下命令通过 npm 安装 Winston:

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

使用

以下是一个使用 Winston 记录应用程序日志的示例:

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

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

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

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

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

上面的示例中,我们首先使用 winston.createLogger 函数创建了一个新的 Winston 日志记录器。通过 transports 属性,我们可以指定日志输出目标,例如文件或控制台。在这个示例中,我们将错误日志写入 error.log 文件,将所有日志都写入 combined.log 中。

在路由中,我们使用 logger.log 函数记录了一个日志。Winston 提供了多个级别的日志记录函数,包括 errorwarninfoverbosedebugsilly。在这里,我们使用了 info 级别的日志记录函数,并将消息传递给它。

最后,在错误处理中间件中,我们使用 logger.error 函数记录了一个错误日志。

结论

在本文中,我们介绍了使用 Morgan 和 Winston 两个流行的 Node.js 日志库来记录 Express.js 应用程序的 HTTP 请求日志和应用程序日志。无论您是记录应用程序健康状况、调试代码还是满足法规要求,您都可以通过这些工具来满足你的需求。但是,请注意在应用程序开发时,不要记录敏感信息,遵守法规和隐私政策。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6710eafbad1e889fe2fcc4e8


猜你喜欢

  • Mocha 测试框架中如何测试 Chrome 扩展程序?

    引言 在这个越来越注重用户体验的时代,Chrome 扩展程序越来越受到人们的青睐。为了确保 Chrome 扩展程序的质量,我们需要进行测试。这时我们可以使用 Mocha 测试框架来测试我们的 Chro...

    9 天前
  • 如何在 Cypress 中设置代理

    Cypress 是一个流行的前端自动化测试框架,可以用于编写功能测试、端到端测试等自动化测试。对于一些需要调用外部 API 的测试用例,我们可能需要设置代理来模拟生产环境中的请求,或者进行接口拦截和修...

    9 天前
  • 使用缓存加速应用程序性能的技巧

    随着互联网和移动设备的普及,Web应用程序的性能成为了一个愈发重要的话题。使用缓存是加速应用程序性能的一个重要方法,通过在本地存储重复使用的数据或资源,避免了不必要的网络请求和重新计算,从而提高了应用...

    9 天前
  • PWA 技术如何实现应用的体验优化

    前言 随着移动互联网的快速发展,web应用的用户体验已经受到越来越多的关注。鉴于传统的WEB技术存在着离线访问、加速、缓存和响应速度等问题,谷歌推出了 PWA 技术,优化了 web 应用在各个方面的体...

    9 天前
  • 解决 Flask-RESTful 跨域和 HTTPS 安全问题

    跨域问题 跨域问题指的是在 Web 应用程序中,从一个域名的网页去访问另一个域名的资源时,需要经过浏览器的同源策略限制。虽然这是一种重要的安全措施,但是可能会限制 Web 应用程序的功能。

    9 天前
  • 跟我学 Redux —— 基础篇

    Redux 是一个流行的 JavaScript 应用程序状态管理库,它旨在使状态变得可预测和易于调试。Redux 可以应用在 React 以及其他应用程序之中。在本篇文章中,我们将了解一些基础的 Re...

    9 天前
  • ESLint 在 React Native 中的应用

    在现代的前端开发中,ESLint 已经成为了一个必不可少的工具。它可以帮助我们检测代码中的潜在问题和常见错误,从而提高开发效率和代码质量。在 React Native 开发中,ESLint 也同样适用...

    9 天前
  • ECMAScript 2020 中的 Class Property Declarations:你必须掌握的要点

    ECMAScript 2020 中的 Class Property Declarations:你必须掌握的要点 作为一名前端开发者,我们知道 JavaScript 是一门语言有着不断发展的历史。

    9 天前
  • Next.js 中优化构建速度的技巧

    前言 Next.js 是一个流行的 React 框架,支持服务器渲染和静态生成页面。然而,由于 Next.js 在构建时需要进行静态分析、压缩和打包,因此,构建时间会比较长,尤其是在构建大型项目时。

    9 天前
  • Promise 在微信小程序中的应用技巧

    前言 在微信小程序开发中,我们经常需要进行异步操作,例如调用接口、加载资源等。为了避免回调地狱和提高代码的可读性,我们可以使用 Promise 来进行异步操作。本文将介绍 Promise 在微信小程序...

    9 天前
  • 响应式设计下如何优化视频播放体验?

    在现代社会中,人们越来越倾向于在各种设备上观看视频,尤其是移动设备。因此,在响应式设计下,优化视频播放体验变得尤为重要。本文将介绍如何通过使用适当的技术和优化策略来提高响应式设计中视频播放的体验。

    9 天前
  • JavaScript 新特性:ES10 你都懂了吗?

    随着 JavaScript 成为前端开发中最常用的编程语言,JavaScript 的更新速度也越来越快,以至于我们经常要学习新的特性。随着 ES10 (ECMAScript 2019)的发布,Java...

    9 天前
  • 在两个相邻的 div 之间使用 Tailwind 的 padding 应进行哪些调整?

    在前端页面开发中,使用 padding 可以有效地控制页面元素的布局。而在使用 Tailwind 进行页面开发时,如何在两个相邻的 div 之间使用 padding 进行布局,是需要我们关注的问题。

    9 天前
  • 如何使用 GraphQL 来过滤响应数据?

    GraphQL 是一种用于 API 的查询语言,是一种更高效、强大和灵活的替代方案。在前端开发中,GraphQL 可以极大地提高开发效率和应用程序性能。本文将介绍如何使用 GraphQL 来过滤响应数...

    9 天前
  • 如何在 Flexbox 布局中实现最小和最大宽度

    Flexbox 是一种强大的布局方式,它允许我们创建灵活的、响应式的布局并根据需要对其进行自适应。然而,在某些情况下,我们需要限制元素的最小和最大宽度,以避免内容溢出或在小屏幕上出现布局问题。

    9 天前
  • ECMAScript 2015 中的新特性:Promise 详解

    在 ECMAScript 2015 中,Promise 是一个非常重要的新特性。Promise 是一种用于异步编程的技术,它可以解决回调地狱(Callback Hell)问题。

    9 天前
  • 使用 Fastify 构建微服务的最佳实践

    前言 在微服务架构中,前端服务的重要性逐渐增加。使用 Node.js 编写前端服务之前,我们需要考虑一些问题。例如,如何提供高性能的路由,如何处理请求和响应,以及如何实现服务间的协作。

    9 天前
  • 在 Deno 中使用 PM2 进行进程管理

    在 Node.js 中,常常使用 PM2 进行进程管理以保证应用在生产环境下的可靠性和稳定性。那么,在 Deno 中,我们也可以使用 PM2 进行进程管理吗?答案是肯定的。

    9 天前
  • 部署过程中 Headless CMS 出现问题怎么办?解决方案详解

    Headless CMS是一种应用程序,它将内容管理系统和内容传递独立于前端,给您的网站更多的灵活性和自由度。但是,在部署过程中出现 Headless CMS 的问题是很常见的。

    9 天前
  • SASS 引用本地外部 CSS 文件的方法

    在前端开发中,CSS 是我们不可或缺的一部分。而 SASS 作为 CSS 预处理器,能够让我们更加高效、便捷地编写 CSS。但在实际开发中,我们可能会遇到需要引用本地外部的 CSS 文件的情况,那么该...

    9 天前

相关推荐

    暂无文章