返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Node输出日志的正确方法示例
  • 109
分享到

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

Node输出日志Node日志 2023-03-06 08:03:41 109人浏览 安东尼
摘要

目录背景使用 Winston 进行日志记录安装和使用 WinstonWinston 的日志级别Winston 的格式化器Winston 的传输器Winston的实践接入es注意事项背

背景

每个程序员都喜欢在有问题的代码中插入一些日志的方法来帮助调试程序,比如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输出日志的资料请关注编程网其它相关文章!

--结束END--

本文标题: Node输出日志的正确方法示例

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

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

猜你喜欢
  • Node输出日志的正确方法示例
    目录背景使用 Winston 进行日志记录安装和使用 WinstonWinston 的日志级别Winston 的格式化器Winston 的传输器Winston的实践接入es注意事项背...
    99+
    2023-03-06
    Node输出日志 Node 日志
  • Node输出日志的正确方法是什么
    本篇内容主要讲解“Node输出日志的正确方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node输出日志的正确方法是什么”吧!背景每个程序员都喜欢在有问题的代码中插入一些日志的方法来帮助...
    99+
    2023-07-05
  • C# log4net 日志输出的实现示例
    目录第一步:安装log4net第二步:添加log4net.config配置文件第三步:添加日志配置第四步:AssemblyInfo.cs中配置 Watch = true思路: 1.安...
    99+
    2024-04-02
  • Springboot异常日志输出方式的示例分析
    小编给大家分享一下Springboot异常日志输出方式的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!lombok插件使用引入依赖,在项目中使用Lombok可以减少很多重复代码的书写。比如说getter/sette...
    99+
    2023-06-22
  • Oracle 11g正确删除归档日志方法
    1、用oracle用户登陆rman并连接数据库RMAN>connect target / RMAN>rman target /2、列出并确认归档日志路径RMAN>list arc...
    99+
    2024-04-02
  • Linux中shell脚本输出日志的示例分析
    这篇文章给大家分享的是有关Linux中shell脚本输出日志的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、日志方法简介:#日志名称log="./upgrade.log" ...
    99+
    2023-06-09
  • crontab脚本错误日志怎么正确的输出写入到文件
    这篇文章主要介绍“crontab脚本错误日志怎么正确的输出写入到文件”,在日常操作中,相信很多人在crontab脚本错误日志怎么正确的输出写入到文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”crontab...
    99+
    2023-07-05
  • logback自定义json日志输出示例详解
    目录前言依赖的jarmaven坐标配置Appender节点appender配置说明:配置logger节点logger配置说明:前言 先说下楼主的使用场景吧,将程序的某些方法调用以js...
    99+
    2024-04-02
  • 解读crontab脚本错误日志和正确的输出写入到文件
    目录crontab脚本错误日志和正确的输出写入到文件不输出内容将正确和错误日志都输出到 /tmp/load.log只输出正确日志到 /tmp/load.log只输出错误日志到 /tmp/load.log名词解释cront...
    99+
    2023-04-07
    crontab日志 crontab脚本错误日志 crontab输出写入到文件
  • Python 限制输出日志的大小的方法
    这篇文章主要讲解了“Python 限制输出日志的大小的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python 限制输出日志的大小的方法”吧!限制输出日志的大小有多种方法,最优雅的莫过...
    99+
    2023-06-14
  • mongodb清除连接和日志的正确方法分享
    目录前言关闭current的方法一:关闭current的方法二:日志去重script导出数据总结前言 最近在做并发,服务器卡死了。 感觉是pymongo未能完全close掉和mong...
    99+
    2024-04-02
  • autojs的Node.js正确退出脚本示例
    目录正文写界面的格式脚本退出但是可能会发生异常报错正文 写界面的格式 class MainActivity extends ui.Activity { ... } 比如我们在...
    99+
    2023-01-31
    autojs Node.js退出脚本 autojs Node.js
  • logback输出日志屏蔽quartz的debug等级日志方式
    目录logback输出日志屏蔽quartz的debug等级日志解决方法quartz关闭DBUG日志把他的log级别改成 ERROR或者索性logback输出日志屏蔽quartz的de...
    99+
    2024-04-02
  • linux重定向输出日志的方法是什么
    在Linux中,重定向输出日志有以下几种方法:1. 使用">"符号将命令的输出重定向到文件中,例如:`command > file....
    99+
    2023-08-18
    linux
  • SpringBoot日志的配置及输出的方法是什么
    这篇文章主要介绍“SpringBoot日志的配置及输出的方法是什么”,在日常操作中,相信很多人在SpringBoot日志的配置及输出的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SpringBoo...
    99+
    2023-06-21
  • shell脚本实现分日志级别输出的方法
    shell脚本如何优雅的记录日志信息,下面让我们一步一步,让shell脚本的日志也变得高端起来,实现如下功能 ①设定日志级别,实现可以输出不同级别的日志信息,方便调试 ②日志格式类似为:[日志级别] 时间...
    99+
    2022-06-04
    脚本 级别 方法
  • Shell执行脚本并输出日志文件的方法
    shell 错误输出重定向到标准输出 ./tmp/test.sh > /tmp/test.log 2>&1 >和<是文件重定向符。那么1和2是什么? ...
    99+
    2022-11-13
    Shell执行脚本 Shell输出日志文件
  • 解析springboot集成AOP实现日志输出的方法
    开发接口系统中主要的一环就是日志输出,如果系统出现问题,日志能帮我们去定位问题,最常见的日志是调用方 所调用的IP 接口地址 对应方法 参数值 以及接口方接收到请求 所返回的参数。如...
    99+
    2024-04-02
  • C#实现UI控件输出日志的方法详解
    目录文章描述开发环境开发工具实现代码实现效果文章描述 一般情况下,我们的日志文件是用来记录一些关键操作或者异常,并且是后台存储,并不对外开放的;但是也有些时候,特别是做一些小工具程序...
    99+
    2022-11-13
    C# UI控件输出日志 C# 输出日志
  • 关于log4j2的异步日志输出方式
    目录log4j2的异步日志输出方式第一种实现异步方式AsyncAppender第二种实现异步方式AsyncLoggerlog4j2异步注意事项log4j2异步类型小提示log4j2的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作