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

相关文章

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

SSM项目使用AOP技术进行日志记录

本步骤只记录完成切面所需的必要代码 本人开发中遇到的问题: 切面一直切不进去,最后发现需要在springMVC的核心配置文件中中开启注解驱动才可以,只在spring的核心配置文件中开启是不会在web项目中生效的。 之后按照下面的代码进行配置,然后前端在访问controller层中的路径时即可观察到日志已经被正常记录到数据库,代码中有部分注释,看不懂的可以参照注释。接下来进入正题 1、导入m

多数据源的事务处理总是打印很多无用的log日志

之前做了一个项目,需要用到多数据源以及事务处理,在使用事务处理,服务器总是打印很多关于事务处理的log日志(com.atomikos.logging.Slf4jLogger),但是我们根本不会用到这些log日志,反而使得查询一些有用的log日志变得困难。那要如何屏蔽这些log日志呢? 之前的项目是提高项目打印log日志的级别,后来觉得这样治标不治本。 现在有一个更好的方法: 我使用的是log

android两种日志获取log4j

android   log4j 加载日志使用方法; 先上图: 有两种方式: 1:直接使用架包 加载(两个都要使用); 架包:android-logging-log4j-1.0.3.jar 、log4j-1.2.15.jar  (说明:也可以使用架包:log4j-1.2.17.jar)  2:对架包输入日志的二次封装使用; 1:直接使用 log4j 日志框架获取日志信息: A:配置 日志 文

nvm及nodejs安装相关

安装 1.清空文件夹,卸载nvm及nodejs 2.下载安装包 https://github.com/coreybutler/nvm-windows/releases (也下载有) 3.安装nvm 地址写D:/nvm和D:/nodejs 4.安装nodejs nvm ls available //查询版本nvm install 16.20.2 //安装对应版本号nvm use 1

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

机械学习—零基础学习日志(概率论总笔记5)

引言——“黑天鹅” 要获得95%以上置信度的统计结果,需要被统计的对象出现上千次,但是如果整个样本只有几千字,被统计的对象能出现几次就不错了。这样得到的数据可能和真实的概率相差很远。怎么避免“黑天鹅”? 古德-图灵折扣估计法 在词语统计中,有点词语虽然是出现0次,但是实际的出现概率并不是永远不可能的零。 那需要把一些概率转移给到这些词语。 古德的做法实际上就是把出现1次的单词的总量,给了