Logging with Winston and Node.js

假设您有一个在生产环境中运行的应用程序,每天有数百万用户赚取数千美元。应用程序可能存在错误的原因有多种,作为开发人员,您需要找出原因并修复它。没有人愿意使用有问题的应用程序,修复错误会花费时间和金钱。

你怎么能解决这个问题?也许通过回到代码并检查每一行代码是否按预期运行。这对于小型应用程序来说更容易,但即便如此,尝试触发与用户相同类型的错误也可能很困难。想象一下,这在大型应用程序中会有多难。

假设有一个实例,应用程序收集一些用户的信息并将它们保存到数据库中。

如果应用程序失败,服务器将向最终用户返回系统错误。最好能捕获这些实例并解决这些错误。在这种情况下,您如何知道用户 a 或用户 b 遇到了单个系统错误?这些错误可能由代码中的错误、损坏的文件、错误的逻辑或数据类型不匹配触发。

如果你需要避免这种挫折,你就无法避免日志记录。日志是程序员首先要查找的地方,用于跟踪错误和事件流,尤其是来自服务器的事件。日志会告诉您当应用程序运行并与用户交互时会发生什么。日志记录的一个很好的用例是,例如,如果您的系统中有一个错误,并且您想了解导致其发生的步骤。

日志记录是将应用程序活动生成的信息记录到日志文件中的过程。保存在日志文件中的消息称为日志。日志是记录在日志文件中的单个实例。

在 Node.js 中构建应用程序日志至关重要。在本地运行应用程序时,可以将其挂接到调试器上,非常棒,可以在运行应用程序时发现问题。在开发过程中,您通常会使用 console.log 来获取应用程序日志。

但是当一个应用程序投入生产并且用户开始与之交互时,你就不能再使用 console.log 了。如果出现问题并且应用程序崩溃,则无法使用控制台进行检查。如果你有一个简洁、干净和高质量的日志中间件,比如 Winston,那会很有帮助。

Winston 处理您的应用程序活动并将有用的信息生成到日志文件或数据库中。之后,您可以检查应用程序生成的所有活动。

本指南将在 Winston 的上下文中解释日志记录。

了解生产应用程序是否出现问题的唯一方法是创建日志。 记录重新创建并为您保存该问题。 如果出现问题或出现问题,日志会告诉您。

了解系统的行为方式。 日志记录将生成有关系统如何与用户交互以及进出系统的信息。

跟踪您的系统活动。 日志可以显示实例发生的时间以及触发日志的原因。

通常,日志记录的临界值是:

  • 错误跟踪
  • 调试
  • 应用性能

选择 winston 的收益

Winston 是最好的日志中间件之一,每周下载量约为 4,000,000 次。以下属性使 Winston 成为整体通用的日志记录中间件。

  • 它使用简单且可配置。
  • 日志级别(优先级)。 Winston 提供日志记录级别。它们表示日志优先级;这使您能够从需要较少关注的日志中整理出关键日志。例如:{错误:0,警告:1,信息:2,详细:3,调试:4,傻:5}。在这种情况下,错误日志的优先级高于详细日志。
  • 记录通道(传输)。一个好的记录器有不同的方式来选择你的日志输出目的地。使用 Winston,您可以以不同方式发送和保存日志,例如文件、数据库、电子邮件和控制台。
  • 日志格式。 Winston 为您提供了多种日志格式。例如,在将日志保存到 Mongo 数据库时,日志格式需要为 JSON 格式。
  • 日志分析。 Winston 可帮助您分析代码块并测量成功执行代码所需的时间。

Winston transporters

Winston 的特性之一是它支持各种传输,例如文件传输。 这会将生成的日志消息保存到日志文件中。 该文件是在您的系统中指定的。 如果应用程序创建了它的第一个日志实例,该文件将自动生成。 之后,任何日志都将保存到创建的文件中。

为此,记录器配置对象需要指向一个文件(文件传输器)。 只需将新 winston.transports.File 中的传输配置对象 .transports.Console() 替换为 .transports.File() 即可,如下所示。

transports.File({filename: 'logs/example.log'
})

这指定生成的任何日志都将保存在日志文件夹下的 example.log 文件中。

传输配置将是:

// Logger configuration
const logConfiguration = {'transports': [new winston.transports.File({filename: 'logs/example.log'})]
};

log 文件的内容:

Winston 允许您实现多个日志传输,即可以将日志记录到文件、控制台或数据库中。

下面的 Logger 配置记录到控制台和文件。 我们将向日志配置对象添加一个传输数组。 在本指南的后面,我们将向您展示如何将日志实例记录到数据库中。

const logConfiguration = {transports: [new winston.transports.Console({level: 'warn'}),new winston.transports.File({level: 'error',// Create the log directory if it does not existfilename: 'logs/example.log'})]
};const logger = winston.createLogger(logConfiguration);// Log some messages
logger.error("Hello, Winston logger, the first error!");
logger.warn("Hello, Winston logger, the first warning!");
logger.warn("Hello, Winston logger, the second warning!");
logger.error("Hello, Winston logger, the second error!");
logger.info("Hello, Winston logger, some info!");
logger.debug("Hello, Winston logger, a debug!");

这规定:

  • 日志将显示在控制台输出中。
  • 只有属于错误级别的日志才会记录在 example.log 文件中。

使用 Winston,您可以指定保存日志的默认格式。

例如,假设我们想以 JSON 格式登录,我们可以使用 Winston.format 指定,并且日志实例将以 JSON 格式保存。

format: winston.format(
)

该格式采用其他日志表单属性,例如

  • ms() - 自记录上次日志以来的时间(以毫秒为单位)。
  • label() - 向记录的消息添加标签。
  • timestamp() - 收到日志消息的时间戳。
  • splat() - 提供字符串插值。

要将其应用到您的日志中,您需要使用 format.combine,如下例所示。

const logConfiguration = {transports: [new winston.transports.Console()],format: winston.format.combine(winston.format.label({label: `Label												

关于 Node.js 应用里使用 winston 进行日志记录的最佳实践相关推荐

  1. 如何使用 multiparty 工具库在 Node.js 应用里解析 multipart form-data 格式的请求

    我们使用 form 和 input 控件上传文件到服务器,服务器采取 Node.js 应用接收客户端上传的文件.可以使用 multiparty 这个库文件,解析从客户端提交的本地文件.完整的源代码如下 ...

  2. Node.js 应用故障排查手册 —— Node.js 性能平台使用指南

    楔子 前一节中我们借助于 Chrome devtools 实现了对线上 Node.js 应用的 CPU/Memory 问题的排查定位,但是在实际生产实践中,大家会发现 Chrome devtools ...

  3. 如何使用 Node.js 访问 SAP HANA Cloud 数据库里的数据

    登录 SAP Business Technology Platform,找到 space 下自己创建好的 HANA Cloud 实例,右键菜单选择 Copy SQL Endpoint,将 HANA C ...

  4. 使用 Winston 和 Log4js 记录 Node.js 应用程序

    了解 Node.js 日志记录器并开始使用两个最受欢迎的 Node 日志包 运行服务器端应用程序时,会发生很多事件,其中大多数事件都会写入日志文件中.日志文件可能是磁盘上文件的集合,也可能是数据库中的 ...

  5. Node.js入门 - 回调函数

    本文自theprojectspot.com翻译而来,文章原作者为Lee Jacobson, 已经作者授权翻译用于非商业用途.原文地址:猛戳这里进入 如果你还没读过第一篇,先跑到这里去瞧一瞧,我保证你多 ...

  6. 柏林纪行(中):Node.js Collaboration Summit

    传送门: 柏林纪行(上):整体感受 柏林纪行(中):Node.js Collaboration Summit 柏林纪行(下):JSConf EU Node.js Collaboration Summi ...

  7. Node.js Web开发框架

    Node.js非常适用于Web开发,但是现在无论是一个网站,还是Web App都已经成为包括很多不同部分,如前端.数据库.业务模块.功能模块等等的大型项目,使用Node.js从零开始进行Web开发,也 ...

  8. Elasticsearch:使用 Filebeat 从 Node.js Web 应用程序提取日志

    本指南演示了如何从 Node.js Web 应用程序中提取日志并将它们安全地传送到 Elasticsearch Service 部署中. 你将设置 Filebeat 来监控具有标准 Elastic C ...

  9. 为一个 iOS 应用编写一个简单的 Node.js/MongoDB Web 服务

    原文链接:https://github.com/nixzhu/dev-blog/blob/master/2014-04-21-write-a-simple-nodejs-mongodb-web-ser ...

最新文章

  1. 简单封装 HTTP 请求
  2. 高性能计算机存储部件有磁盘阵列,信息存储技术——磁盘阵列解读.pptx
  3. [Qt教程] 第40篇 网络(十)WebKit初识
  4. 洛谷-P1903 数颜色 分块 bitset
  5. 做手游的计算机配置要求,原神pc配置要求高吗 最低什么配置能流畅运行​
  6. ApacheHttpServer修改httpd.conf配置文件
  7. Word文档加密技巧
  8. 计算机系统的主要功能要求,计算机系统的主要功能是什么
  9. 大数据之-Hadoop3.x_Hadoop_HDFS_总结---大数据之hadoop3.x工作笔记0080
  10. SpringCloud微服务详细流程
  11. [Angular Tutorial] 3-Components
  12. python -- 装饰器的高级应用
  13. 寻找节点d=n的节点算法
  14. 如何将内网ip映射到外网
  15. DS1302驱动代码
  16. Springer期刊参考文献格式如何用Latex生成
  17. 2021FME博客大赛 —— FME在道路实景建模中的应用研究
  18. 第二课: 雷电模拟器的多开和打开
  19. C#实现右下角弹窗效果
  20. GameCenter

热门文章

  1. 如何切换 SVN 用户名
  2. Oracle数据库的导入和导出的两种方式
  3. 网络相关的一些基本的命令的使用(ping、ifconfig、route、netstat)---Linux学习笔记
  4. 设计一种面向对象脚本语言
  5. LINUX下PHP安装VLD扩展并测试OK
  6. jQuery文本动画效果
  7. 中国程序员 VS 美国程序员,差距就在这五点
  8. asp.net环境下的静态类以及静态变量
  9. 常用数据类型(C#)
  10. ASP+MSSQL注入工具 web版 beta 3 final release