nodejs日志:morgan和winston篇

2024-06-17 12:44
文章标签 日志 nodejs winston morgan

本文主要是介绍nodejs日志:morgan和winston篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 介绍一下`morgan`和`winston`的区别
      • morgan
        • 功能
        • 优势:
      • winston
        • 功能
        • 优势
      • 选择
    • 代码示例

介绍一下morganwinston的区别

morgan

功能

morgan 是一个 HTTP 请求日志中间件,专门用于记录 Express 应用的 HTTP 请求日志。它简单易用,提供多种预定义的日志格式,能够自动记录每个 HTTP 请求的详细信息,如请求方法、URL、响应时间等。

优势:
  1. 专注于 HTTP 请求日志:morgan 专门用于记录 HTTP 请求日志,能够自动记录和格式化 HTTP 请求信息。
  2. 易于集成:morgan 是 Express 的中间件,集成非常方便。
  3. 标准化输出:morgan 提供的多种日志格式(如 combined, common, dev 等)标准化了日志输出,使其易于阅读和分析。

winston

功能

winston 是一个通用的日志库,支持灵活的配置和多种传输方式(如控制台输出、文件存储、HTTP 传输等)。它适用于记录应用程序的各种日志,包括信息日志、错误日志、调试日志等。

优势
  1. 通用日志记录:winston 适用于记录各种类型的日志,不限于 HTTP 请求日志。
  2. 灵活配置:winston 支持自定义格式、不同级别的日志、多个传输方式等,灵活性很高。
  3. 日志管理:通过配置 DailyRotateFile 等插件,winston 可以实现日志文件的自动轮换、压缩和删除,便于日志管理。

选择

  1. morgan:专注于 HTTP 请求日志,简单易用,适合作为 Express 中间件记录请求日志
  2. winston: 提供灵活的日志记录和管理功能,适用于记录应用程序的各种日志
  3. 所以结合使用才是最佳解

代码示例

安装3个依赖

npm install morgan winston winston-daily-rotate-file

这里还有一个winston-daily-rotate-file目的是为了将每天的日志放入不同的文件,防止文件过大,并且会将老日志进行打包压缩

const express = require("express");
const morgan = require("morgan");
const path = require("path");
const fsExtra = require("fs-extra");
const winston = require("winston");
const DailyRotateFile = require("winston-daily-rotate-file");const app = express();// 日志目录路径
const logDirectory = path.join(__dirname, "logs");// 确保日志目录存在
fsExtra.ensureDirSync(logDirectory);// 配置 winston
const logger = winston.createLogger({level: "info",format: winston.format.combine(winston.format.timestamp(),winston.format.json()),transports: [new winston.transports.Console(),new DailyRotateFile({filename: path.join(logDirectory, "application-%DATE%.log"),datePattern: "YYYY-MM-DD",zippedArchive: true,maxSize: "20m",maxFiles: "14d",}),],
});// 使用 morgan 记录 HTTP 请求到日志文件,并重定向到 winston
app.use(morgan("combined", {stream: {write: (message) => logger.info(message.trim()),},})
);// 示例路由
app.get("/", (req, res) => {res.send("Hello, world!");
});// 错误处理
app.use(function (err, req, res, next) {// set locals, only providing error in developmentres.locals.message = err.message;res.locals.error = req.app.get("env") === "development" ? err : {};logger.error({url: req.url,body: req.body,error: err.message,stack: err.stack,});// render the error pageres.status(err.status || 500);res.send({code: 500,msg: err.message,});
});// 启动服务器
const port = 3000;
app.listen(port, () => {logger.info(`Server is running on port ${port}`);
});

注意:如果记录 http 请求的话,需要把日志部分的注册放到路由拦截之前

这篇关于nodejs日志:morgan和winston篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069475

相关文章

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

nodejs打包作为公共包使用的完整流程

《nodejs打包作为公共包使用的完整流程》在Node.js项目中,打包和部署是发布应用的关键步骤,:本文主要介绍nodejs打包作为公共包使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言一、前置准备二、创建与编码三、一键构建四、本地“白嫖”测试(可选)五、发布公共包六、常见踩坑提醒

Java 日志中 Marker 的使用示例详解

《Java日志中Marker的使用示例详解》Marker是SLF4J(以及Logback、Log4j2)提供的一个接口,它本质上是一个命名对象,你可以把它想象成一个可以附加到日志语句上的标签或戳... 目录什么是Marker?为什么使用Markejavascriptr?1. 精细化的过滤2. 触发特定操作3

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

nginx配置错误日志的实现步骤

《nginx配置错误日志的实现步骤》配置nginx代理过程中,如果出现错误,需要看日志,可以把nginx日志配置出来,以便快速定位日志问题,下面就来介绍一下nginx配置错误日志的实现步骤,感兴趣的可... 目录前言nginx配置错误日志总结前言在配置nginx代理过程中,如果出现错误,需要看日志,可以把