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

相关文章

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

使用nohup和--remove-source-files在后台运行rsync并记录日志方式

《使用nohup和--remove-source-files在后台运行rsync并记录日志方式》:本文主要介绍使用nohup和--remove-source-files在后台运行rsync并记录日... 目录一、什么是 --remove-source-files?二、示例命令三、命令详解1. nohup2.

MySQL精准控制Binlog日志数量的三种方案

《MySQL精准控制Binlog日志数量的三种方案》作为数据库管理员,你是否经常为服务器磁盘爆满而抓狂?Binlog就像数据库的“黑匣子”,默默记录着每一次数据变动,但若放任不管,几天内这些日志文件就... 目录 一招修改配置文件:永久生效的控制术1.定位my.cnf文件2.添加核心参数不重启热更新:高手应

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

golang 日志log与logrus示例详解

《golang日志log与logrus示例详解》log是Go语言标准库中一个简单的日志库,本文给大家介绍golang日志log与logrus示例详解,感兴趣的朋友一起看看吧... 目录一、Go 标准库 log 详解1. 功能特点2. 常用函数3. 示例代码4. 优势和局限二、第三方库 logrus 详解1.

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各