返回顶部
首页 > 资讯 > 前端开发 > VUE >如何在Node.js服务中写日志
  • 472
分享到

如何在Node.js服务中写日志

2024-04-02 19:04:59 472人浏览 安东尼
摘要

小编给大家分享一下如何在node.js服务中写日志,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用 node 写服务端的时候,比

小编给大家分享一下如何在node.js服务中写日志,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

node 写服务端的时候,比较头疼的是排查定位问题,因为不像 Chrome 浏览器中,我们有直接的报错提示在 dev tool 中,或者我们可以直接打断点调试。

经常我们会遇到在明明我在 test 环境可以啊,为什么 live 环境不行的问题。假如没有日志,对于这种问题,根据毫无头绪。

快速新建一个 koa 项目

先保证你全局安装了 koa2

npm i koa2 -g

然后执行:

koa2 -e node-log # 新建一个项目
cd node-log
npm i # 安装依赖
npm run start # 启动

基础的服务就搭建起来了。访问 Http://localhost:3000/,就可以看到以下的页面:

如何在Node.js服务中写日志

以上是一个快速搭建 koa 服务的方法。这个项目中内置了一个写日志的库——koa-logger。我们先来看看它做了什么东西吧。

koa-logger

这个库比较简单,记录请求的基本信息,比如请求的方法、URl、用时等。作为中间件中使用,注意:推荐放在所有的中间件之前,这个跟 koa 的洋葱模型有关。假如不是第一个,计算时间会不准确。

var logger = require('koa-logger');
app.use(logger());

在我们访问响应的资源的时候,会在控制台输出相应的日志如下:

  <-- GET /
GET / - 14
  --> GET / 200 19ms 234b
  <-- GET /stylesheets/style.CSS
GET /stylesheets/style.css - 1
  --> GET /stylesheets/style.css 200 3ms 111b
  <-- GET /favicon.ico
GET /favicon.ico - 1
  --> GET /favicon.ico 404 1ms -

默认情况下,日志是通过 console 的方式直接输出到控制台中,假如我们需要对日志做自定义的操作,比如写入到日志文件中等。可以通过类似完成,比如我记录时间:

app.use(logger((str) => {
  console.log(new Date() + str)
  // redirect koa logger to other output pipe
  // default is process.stdout(by console.log function)
}))

结果:

Mon Oct 11 2021 19:28:41 GMT+0800 (China Standard Time)  <-- GET /
GET / - 10ms
Mon Oct 11 2021 19:28:41 GMT+0800 (China Standard Time)  --> GET / 200 20ms 226b
Mon Oct 11 2021 19:28:41 GMT+0800 (China Standard Time)  <-- GET /stylesheets/style.css
Mon Oct 11 2021 19:28:41 GMT+0800 (China Standard Time)  --> GET /stylesheets/style.css 200 4ms 111b

koa-log4js

koa-logger 比较轻量,也暴露了相对灵活的接口。但在实际业务中使用,我个人推荐使用 koa-log4js。主要理由如下:

  • koa-logger 看起来只支持中间件的使用方式,而不支持上报特定日志的功能。

  • 内置的功能比较少。比如日志的分类和落盘等。

koa-log4js 对 log4js 做了一层包装,从而支持 Koa 日志的中间件。它的配置和 log4js 是保持一致的。所以假如你用 log4js 的话,使用上应该是一致的。

使用

安装:

npm i --save koa-log4

先来看使用,根目录新建一个文件夹 log。并且新建一个文件夹 utils,在其中新建文件 logger.js。代码如下:

const path = require('path');
const log4js = require('koa-log4');
const RUNTIME_PATH = path.resolve(__dirname, '../');
const LOG_PATH = path.join(RUNTIME_PATH, 'log');

log4js.configure({
  // 日志的输出
  appenders: {
    access: {
      type: 'dateFile',
      pattern: '-yyyy-MM-dd.log', //生成文件的规则
      alwaysIncludePattern: true, // 文件名始终以日期区分
      encoding: 'utf-8',
      filename: path.join(LOG_PATH, 'access.log') //生成文件名
    },
    application: {
      type: 'dateFile',
      pattern: '-yyyy-MM-dd.log',
      alwaysIncludePattern: true,
      encoding: 'utf-8',
      filename: path.join(LOG_PATH, 'application.log')
    },
    out: {
      type: 'console'
    }
  },
  cateGories: {
    default: { appenders: [ 'out' ], level: 'info' },
    access: { appenders: [ 'access' ], level: 'info' },
    application: { appenders: [ 'application' ], level: 'all'}
  }
});

// getLogger 传参指定的是类型
exports.accessLogger = () => log4js.koaLogger(log4js.getLogger('access')); // 记录所有访问级别的日志
exports.logger = log4js.getLogger('application');

简单解释一下,configurelog4js-node 的配置(后文会详解),通过 getLogger 函数传参为日志类型,比如 access 是访问级别日志。

然后在 app.js 中加入:

const { accessLogger, logger } = require('./utils/logger');
app.use(accessLogger())

以及 routes/index.js 中加入:

+ const { logger } = require('../utils/logger')

router.get('/', async (ctx, next) => {
+  logger.info('我是首页');
  await ctx.render('index', {
    title: 'Hello Koa 2!'
  })
})

刷新,可以看到在 log 文件夹中输出两个文件:

如何在Node.js服务中写日志

分别记录了:

[2021-10-12T10:43:33.914] [INFO] access - ::1 - - "GET / HTTP/1.1" 200 226 "" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/94.0.4606.71 Safari/537.36"
[2021-10-12T10:43:34.065] [INFO] access - ::1 - - "GET /stylesheets/style.css HTTP/1.1" 200 111 "http://localhost:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36"
[2021-10-12T10:43:33.902] [INFO] application - 我是首页

接下来我们来看看 log4js 的配置。

level

日志的分级,主要作用是更好的展示日志(不同颜色)、有选择的落盘日志,比如在生产中避免一些 debug 的敏感日志被泄露。log4js 默认有九个分级(你可以通过 levels 进行修改),如下:

{
  ALL: new Level(Number.MIN_VALUE, "ALL"),
  TRACE: new Level(5000, "TRACE"),
  DEBUG: new Level(10000, "DEBUG"),
  INFO: new Level(20000, "INFO"),
  WARN: new Level(30000, "WARN"),
  ERROR: new Level(40000, "ERROR"),
  FATAL: new Level(50000, "FATAL"),
  MARK: new Level(9007199254740992, "MARK"), // 2^53
  OFF: new Level(Number.MAX_VALUE, "OFF")
}

如下图所示:

如何在Node.js服务中写日志

只会输出级别相等或者级别高的日志。比如你配置了 WARN,就不会输出 INFO 的日志。 可以在下面配置的 categories 中配置不同的类型日志的日志级别。

categories

日志类别。必须配置默认日志类别,用于没有命中的情况下的兜底行为。该配置为一个对象,key 值为分类名称。比如上述 demo 中:

{
  default: { appenders: [ 'out' ], level: 'info' },
  access: { appenders: [ 'access' ], level: 'info' },
  application: { appenders: [ 'application' ], level: 'all'}
}

其中每个类别都有两个配置 appenders 是一个字符串数组,是输出配置(后文中会详解),可以指定多个,至少要有一个。level 是上文日志级别。

appenders

解决了日志分级和分类,接下来是日志落盘,也就是输出日志的问题。对应的配置是 appenders,该配置的 key 值为自定义的名称(可以给 categories 中的 appenders 使用),属性值为一个对象,配置输出类型。如下所示:

// 日志的输出
appenders: {
  access: {
    type: 'dateFile',
    pattern: '-yyyy-MM-dd.log', //生成文件的规则
    alwaysIncludePattern: true, // 文件名始终以日期区分
    encoding: 'utf-8',
    filename: path.join(LOG_PATH, 'access.log') //生成文件名
  },
  out: {
    type: 'console'
  }
}

其中,out 指的是通过 console 输出,这个可以作为我们的一个兜底。accesstypedataFile,指的是输出文件,然后配置文件的命名和输出路径。除了这个类型,详情可以看官网,比如 SMTP 通过邮件发送(这个需要 nodemailer

总结配置

日志分级、日志分类以及日志落盘,配置上的关系如下:

如何在Node.js服务中写日志

以上是“如何在Node.js服务中写日志”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网VUE频道!

--结束END--

本文标题: 如何在Node.js服务中写日志

本文链接: https://lsjlt.com/news/87999.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何在Node.js服务中写日志
    小编给大家分享一下如何在Node.js服务中写日志,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!用 Node 写服务端的时候,比...
    99+
    2024-04-02
  • 如何在go教程中使用shell编写日志?
    在Go语言开发中,日志是必不可少的一部分。而Shell编写日志是一种非常常见的方法,它可以在Go教程中使用。本文将介绍如何在Go教程中使用Shell编写日志,让你的代码更加高效且易于维护。 首先,我们需要了解在Go语言中如何使用日志库。Go...
    99+
    2023-06-22
    教程 日志 shell
  • Laravel如何重写日志
    这篇文章将为大家详细讲解有关Laravel如何重写日志,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。更改目的:重写了日志格式加入trace,一次请求的唯一标识加入error级别信息推送,事例中使用企业微信...
    99+
    2023-06-14
  • 如何在gitlab服务器端查看日志
    在GitLab中查看日志是GitLab管理员进行系统管理和维护的必要操作。GitLab提供了丰富的操作日志,可以让管理员轻松了解系统的运行状态和操作情况,及时发现问题并进行处理。下面是在GitLab服务器端查看日志的方法。一、登录GitLa...
    99+
    2023-10-22
  • 在 PHP 中写入错误日志文件
    当我们有一个在生产模式下运行的大型 Web 应用程序时,我们需要监控用户可能面临的所有错误或潜在错误。密切关注所有可能的错误的最佳方法是在出现错误时将它们记录到文件中。 本文将介绍内置函数 erro...
    99+
    2024-02-27
  • 如何在MySQL中慢查询日志
    如何在MySQL中慢查询日志?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。什么是慢查询日志MySQL的慢查询日志是 MySQL提供的一种日志记录,它用来记录在 ...
    99+
    2023-06-14
  • 如何在mysql中启用Binlog日志
    如何在mysql中启用Binlog日志?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、一般来说开启binlog日志大概会有1%的性能损耗。启用binlog,通...
    99+
    2023-06-15
  • ASP 日志如何在 Windows 中查看?
    ASP(Active Server Pages)是一种用于构建动态网站的技术,它可以让开发人员编写动态的服务器端脚本,生成 HTML 页面来响应客户端请求。在 ASP 应用程序开发中,日志记录是一个非常重要的环节,因为它可以帮助我们跟踪应...
    99+
    2023-09-11
    日志 windows spring
  • 如何在 Git 中同步 Go 日志?
    Git 是一个非常流行的版本控制工具,用于管理代码和项目。Go 是一种高效、简洁、安全的编程语言,被广泛应用于各种项目中。在使用 Git 进行代码管理时,我们经常需要记录日志以跟踪代码变更。本文将介绍如何在 Git 中同步 Go 日志,并...
    99+
    2023-07-18
    日志 同步 git
  • 如何在Python中解析shell日志?
    Python是一种功能强大的编程语言,它被广泛应用于各种领域,包括数据分析、机器学习、网络编程等。在这些应用场景中,我们经常需要解析shell日志,以便了解程序的运行状态和性能指标。本文将介绍如何在Python中解析shell日志,并提供一...
    99+
    2023-10-27
    path 日志 shell
  • 如何在 Bash 中查看 ASP 日志?
    Bash 是一种流行的 Unix shell,它是许多 Linux 系统的默认 shell。在 Linux 系统中,ASP(Active Server Pages)是一种用于创建动态 Web 应用程序的技术。在开发和维护 ASP 应用程序时...
    99+
    2023-11-06
    日志 windows bash
  • 如何在Python中处理shell中的日志?
    Python语言在日志处理方面具有很好的优势,它可以轻松地处理shell中的日志。在本文中,我们将学习如何使用Python语言处理shell中的日志文件。 首先,让我们来了解一下什么是日志文件。日志文件是指记录系统或应用程序运行状态的文件,...
    99+
    2023-10-27
    path 日志 shell
  • ASP日志:如何在Spring和Django框架中实现日志记录?
    日志是软件开发中不可或缺的一部分,它可以帮助我们跟踪软件的运行状态,找出问题,优化性能等。在Web开发中,日志也是非常重要的。在本文中,我们将讨论如何在Spring和Django框架中实现日志记录。 一、Spring框架中实现日志记录 S...
    99+
    2023-06-27
    日志 spring django
  • 如何在Python项目中引入日志
    目录Logging模块的使用简单使用指定日志输出样式日志记录到文件中自定义日志配置准备日志配置信息准备日志配置信息加载日志配置信息使用日志配置文件创建日志配置文件加载日志配置函数日志效果展示源代码Logging模块的...
    99+
    2022-06-02
    python 日志 python 项目引入日志
  • 如何在golang中使用logger日志包
    这篇文章给大家介绍如何在golang中使用logger日志包,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。golang的优点golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标机器...
    99+
    2023-06-14
  • 如何在python中配置日志记录
    如何在python中配置日志记录?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、lon...
    99+
    2023-06-14
  • 如何在 Go 开发中记录日志?
    Go 作为一门现代化的编程语言,拥有许多优秀的特性和工具,其中之一就是强大的日志记录功能。在 Go 开发中,日志记录是非常重要的,因为它可以帮助开发者在调试和分析程序时更容易地追踪代码执行的路径和状态。在本篇文章中,我们将介绍如何在 Go ...
    99+
    2023-06-19
    开发技术 教程 日志
  • 二维码如何在日志中使用?
    二维码已经成为了我们生活中不可或缺的一部分,我们可以在很多地方看到二维码的身影,比如商场中的商品标签、电影票、食品包装等等。在这些场景中,二维码的主要作用是承载一些信息,方便我们快速地获取这些信息。但是,二维码的作用不仅仅局限于此,我们还...
    99+
    2023-10-06
    二维码 日志 git
  • 如何在Django中处理日志记录?
    Django是一个流行的Web框架,用于开发高性能和可扩展的Web应用程序。在开发Web应用程序时,日志记录是一个非常重要的组成部分。日志记录可以帮助我们跟踪应用程序中的错误、异常和性能问题。在本文中,我们将讨论如何在Django中处理日志...
    99+
    2023-09-04
    日志 javascript django
  • 如何在 ASP IDE 中调试 Laravel 日志?
    Laravel 是一个流行的 PHP Web 开发框架,它提供了非常强大的功能,使得开发人员可以轻松构建高质量的 Web 应用程序。在开发过程中,调试是一个非常重要的环节,因为它可以帮助我们快速识别和解决问题。在本文中,我们将介绍如何在 ...
    99+
    2023-10-14
    ide 日志 laravel
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作