我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Node输出日志的正确方法示例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Node输出日志的正确方法示例

背景

每个程序员都喜欢在有问题的代码中插入一些日志的方法来帮助调试程序,比如System.out.println或console.log。解决后,就会将这些语句删除,周而复始。

但是通过系统日志输出的日志格式都是这种:

// output
console.log("log"); // log
console.info("message"); // message
console.warn("Warning");// warning

现在想象一下,如果你在后端排查问题时,你有数百条这样的信息。这样的日志不仅很难知道消息级别或消息记录的日期,而且过滤和排序日志也是一项艰巨的任务。

我们排查问题时,更期望看到这样的日志:

{"level":"error","message":"Error message","timestamp":"2022-09-20T11:39:33.953Z"}

{"level":"warn","message":"Warning message","timestamp":"2022-09-20T11:39:33.957Z"}

{"level":"info","message":"Info message","timestamp":"2022-09-20T11:39:33.957Z"}

日志API就是为了解决这个问题而设计的。日志API的优点:

  • 可以很容易地取消全部日志记录,或者仅仅取消某个级别以下的日志,而且可以很容易地再次打开日志开关。
  • 可以很简单的禁止日志记录,因此,将这些日志代码留在程序中的开销很小。
  • 日志记录可以被定向到不同的处理器,如在控制台、文件等等。
  • 日志记录器和处理器都可以记录进行过滤,过滤器可以根据过滤器实现指定的标准丢弃那些无用的记录。
  • 日志记录可以采用不同的方式格式化,例如:纯文本或JSON。
  • 应用程序可以使用多个日志记录器。
  • 日志系统的配置由配置文件控制。

在 Node.js 应用中进行日志记录是非常重要的,因为它可以帮助我们跟踪应用程序中的问题和错误。接下来介绍 一下Node.js 的日志记录技术。

使用 Winston 进行日志记录

Winston是一个流行的、功能丰富的、灵活的Node.js日志库。它使用的默认格式是JSON,但可以配置向多个存储设备中发送日志,目前每周下载量接近1千万。

安装和使用 Winston

要使用 Winston,首先需要安装它。可以使用 npm 安装 Winston:

npm install winston

安装完成后,在应用程序中引入 Winston:

const winston = require('winston');

现在可以创建一个 Winston 实例,并开始记录日志。以下是一个示例:

const winston = require('winston');
const logger = winston.createLogger({   
  level: 'info',   
  format: winston.format.json(),   
  transports: [     
    new winston.transports.Console(),     
    new winston.transports.File({ 
      filename: 'error.log', level: 'error' 
    })  
  ]
}); 
logger.info('Hello, world!');

在上面的示例中,创建了一个名为 logger 的 Winston 实例。指定了日志级别为 info,表示只记录等级为 info 或更高的日志消息。我们还指定了一个 json 格式化器,以便记录格式化的 JSON 日志消息。定义了两个传输器,一个将日志消息记录到控制台,另一个将错误日志消息记录到名为 error.log 的文件中。

Winston 的日志级别

Winston 支持多个日志级别,可以根据日志消息的严重程度选择不同的日志级别来记录。Winston 的日志级别从高到低分别为:

  • error:表示发生了错误
  • warn:表示警告性的信息
  • info:表示常规信息
  • verbose:表示详细信息
  • debug:表示调试信息
  • silly:表示无关紧要的信息

Winston 的格式化器

Winston 的格式化器可以帮助我们格式化日志消息,以便更好地组织和分析日志数据。Winston 提供了多个内置的格式化器,例如 jsonsimpleprettyPrint 等。我们也可以自定义格式化器,根据自己的需求来记录日志数据。

以下是一个使用 json 格式化器记录日志的示例:

const winston = require('winston'); 
const logger = winston.createLogger({   
  level: 'info',   
  format: winston.format.json(),   
  transports: [new winston.transports.Console()] 
}); 
logger.info({ message: 'Hello, world!', user: 'Alice' });

Winston 的传输器

Winston 支持多个传输器,可以将日志消息记录到不同的目标中,例如控制台、文件、数据库、syslog 等。以下是一个将日志消息记录到文件中的示例:

const winston = require('winston'); 
const logger = winston.createLogger({   
  level: 'info',   
  format: winston.format.simple(),   
  transports: [
    new winston.transports.File({ filename: 'app.log' })
  ] 
}); 
logger.info('Hello, world!');

在上面的示例中,我们使用 File 传输器将日志消息记录到名为 app.log 的文件中。我们设置日志级别为 info,只记录等级为 info 或更高的日志消息。

除了输出到文件中,Winston还支持输出控制台、http请求以及流的方式。

我们也可以自定义输出的方式,比如输出到邮件、通过接口消息通知等等。

Winston的实践

在实际使用过程中,我比较喜欢将console.log进行一次封装。将 console.log 绑定到 logger.info 方法。每次调用 console.log 时,实际上是在调用 logger.info 方法。因此,日志消息将通过Winston的Console传输器发送到标准控制台中和文件中。

const winston = require('winston');
const logger = winston.createLogger({
  transports: [
    new winston.transports.Console(),
    new winston.transports.File()
  ]
});
// 将 console.log 绑定到 logger.info 方法
console.log = logger.info.bind(logger); 
// 使用 console.log 记录日志消息
console.log('Hello, Winston!');
console.log('This is a log message.');
// error 也可以绑定到logger上,但是建议输出file时,指定新的文件名,方便后续的日志查看。
console.error = logger.error.bind(logger);

如果不在需要日志记录时,可以直接设置level为off,就可以停止日志的记录。

接入es

日志输出和日志格式解决之后,为了方便检索和更快的排查问题,可以将日志接入es。

下面是接入es后,通过kibana查看的结果:

将日志接入 Elasticsearch (ES) 的好处:

  • 快速检索和分析:ES 是一种基于搜索引擎的分布式数据存储和分析引擎,它提供了一种高效的方式来存储和搜索大量的结构化和非结构化数据。通过将日志接入 ES,我们可以使用 ES 强大的搜索和聚合功能来快速检索和分析日志数据。
  • 实时监控:ES 支持实时数据索引和搜索,因此可以实时监控应用程序和系统的状态和性能。通过将日志接入 ES,我们可以实时监控应用程序和系统的日志,并在出现异常或错误时立即采取行动。
  • 可视化和报告:ES 提供了一种灵活和强大的可视化和报告工具,可以将日志数据可视化为图表、仪表板和报告等形式。通过将日志接入 ES,我们可以使用这些工具来生成可视化报告,并帮助我们更好地理解和优化应用程序和系统的性能。

注意事项

  • 日志级别,不要都使用info来使用,要区分不同的日志级别。
  • 日志的打印方式:同步和异步
  • 日志体量的大小:LOG系统就是直接写磁盘文件,既然写磁盘文件就牵扯到磁盘IO,而磁盘IO跟内存读写有一个数量级的性能差别。

以上就是Node输出日志的正确方法示例的详细内容,更多关于Node输出日志的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Node输出日志的正确方法示例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Node输出日志的正确方法示例

这篇文章主要为大家介绍了Node输出日志的正确方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-06

Node输出日志的正确方法是什么

本篇内容主要讲解“Node输出日志的正确方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node输出日志的正确方法是什么”吧!背景每个程序员都喜欢在有问题的代码中插入一些日志的方法来帮助
2023-07-05

Springboot异常日志输出方式的示例分析

小编给大家分享一下Springboot异常日志输出方式的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!lombok插件使用引入依赖,在项目中使用Lombok可以减少很多重复代码的书写。比如说getter/sette
2023-06-22

Linux中shell脚本输出日志的示例分析

这篇文章给大家分享的是有关Linux中shell脚本输出日志的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、日志方法简介:#日志名称log="./upgrade.log" #操作日志存放路径 fsi
2023-06-09

crontab脚本错误日志怎么正确的输出写入到文件

这篇文章主要介绍“crontab脚本错误日志怎么正确的输出写入到文件”,在日常操作中,相信很多人在crontab脚本错误日志怎么正确的输出写入到文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”crontab
2023-07-05

解读crontab脚本错误日志和正确的输出写入到文件

目录crontab脚本错误日志和正确的输出写入到文件不输出内容将正确和错误日志都输出到 /tmp/load.log只输出正确日志到 /tmp/load.log只输出错误日志到 /tmp/load.log名词解释crontab重定向错误日志
2023-04-07

Python 限制输出日志的大小的方法

这篇文章主要讲解了“Python 限制输出日志的大小的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python 限制输出日志的大小的方法”吧!限制输出日志的大小有多种方法,最优雅的莫过
2023-06-14

linux重定向输出日志的方法是什么

在Linux中,重定向输出日志有以下几种方法:1. 使用">"符号将命令的输出重定向到文件中,例如:`command > file.txt`。这将会将命令的输出覆盖式地写入到指定的文件中。2. 使用">>"符号将命令的输出追加到文件中,例如
2023-08-18

SpringBoot日志的配置及输出的方法是什么

这篇文章主要介绍“SpringBoot日志的配置及输出的方法是什么”,在日常操作中,相信很多人在SpringBoot日志的配置及输出的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoo
2023-06-21

C#实现UI控件输出日志的方法详解

一般情况下,我们的日志文件是用来记录一些关键操作或者异常,并且是后台存储,并不对外开放的,但是也有些时候,需要将一些操作步骤、记录等直接显示在窗体上。本文就将利用UI控件输出日志效果,需要的可以参考一下
2022-11-13

shell脚本实现分日志级别输出的方法

shell脚本如何优雅的记录日志信息,下面让我们一步一步,让shell脚本的日志也变得高端起来,实现如下功能 ①设定日志级别,实现可以输出不同级别的日志信息,方便调试 ②日志格式类似为:[日志级别] 时间 funcname:函数名 [li
2022-06-04

Shell执行脚本并输出日志文件的方法

这篇文章主要介绍了Shell执行脚本并输出日志文件的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-11-13

linux shell判断字符串为空的正确方法示例

help命令可以查看帮助help testlinux 下判断字符串是否为空,有一个大坑! 首先想到的两个参数: -z :判断 string 是否是空串 -n :判断 string 是否是非空串 正确做法:#!/bin/shSTRIN
2022-06-04

编程热搜

目录