nodejs写入日志文件

不同日志的结果写入项目目录下的./logs/类型.log

实现结果如下

安装模块

js 复制代码
npm install winston

项目根目录下新建logger.js文件,内容如下:

js 复制代码
const winston = require('winston');
const fs = require('fs');
const path = require('path');

// 创建一个日志目录,如果不存在的话
const logDir = path.join(__dirname, 'logs');
if (!fs.existsSync(logDir)) {
  fs.mkdirSync(logDir);
}

const logger = winston.createLogger({
  // 定义日志级别
  levels: winston.config.npm.levels,
  // 自定义日志格式
  format: winston.format.combine(
    winston.format.timestamp({
      format: 'YYYY-MM-DD HH:mm:ss'
    }),
    winston.format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`)
  ),
  // 定义不同的日志处理器(仅支持info,error,warn,http,verbose,debug,silly)
  transports: [
    // 日志处理器info
    new winston.transports.File({
      // 写入到./logs/info.log
      filename: path.join(logDir, 'info.log'),
      level: 'info'
    }),
    // 日志处理器error
    new winston.transports.File({
      // 写入到./logs/error.log
      filename: path.join(logDir, 'error.log'),
      level: 'error'
    }),
    // 日志处理器warn
    new winston.transports.File({
      // 写入到./logs/warn.log
      filename: path.join(logDir, 'warn.log'),
      level: 'warn'
    }),
    // 日志处理器http
    new winston.transports.File({
      // 写入到./logs/http.log
      filename: path.join(logDir, 'http.log'),
      level: 'http'
    }),
    // 日志处理器verbose
    new winston.transports.File({
      // 写入到./logs/verbose.log
      filename: path.join(logDir, 'verbose.log'),
      level: 'verbose'
    }),
    // 日志处理器debug
    new winston.transports.File({
      // 写入到./logs/debug.log
      filename: path.join(logDir, 'debug.log'),
      level: 'debug'
    }),
    // 日志处理器silly
    new winston.transports.File({
      // 写入到./logs/silly.log
      filename: path.join(logDir, 'silly.log'),
      level: 'silly'
    }),
    // 控制台输出
    new winston.transports.Console({
      // 控制台输出日志级别为 debug 或以上级别,写入到控制台
      level: 'debug',
      format: winston.format.combine(
        winston.format.colorize(),
        winston.format.simple()
      )
    })
  ],
  exitOnError: false // 禁止在日志写入失败时退出程序
});

// 异常处理
process.on('unhandledRejection', (ex) => {
  throw ex;
});

// 捕获未捕获的异常
process.on('uncaughtException', (ex) => {
  logger.error('Uncaught Exception:', ex);
  process.exit(1);
});

module.exports = logger;

在需要使用打印的地方只需要如下导入使用即可

js 复制代码
const logger = require('./logger');

// (仅支持info,error,warn,http,verbose,debug,silly)
logger.info('This is a successful operation.');
logger.error('This is an error operation.');
logger.warn('This is a warning operation.');
logger.http('This is a http operation.')
logger.verbose('This is a verbose operation.')
logger.debug('This is a debug operation.')
logger.silly('This is a silly operation.')

运行项目

不同的级别的日志打印的内容分别如下(一般使用info.log【打印成功和错误和警告级别】和error.log【仅仅打印错误级别】):

控制台级别输出打印如下(在控制台打印的结果):

js 复制代码
info: This is a successful operation. {"timestamp":"2024-10-25 11:29:51"}
error: This is an error operation. {"timestamp":"2024-10-25 11:29:51"}
warn: This is a warning operation. {"timestamp":"2024-10-25 11:29:51"}
http: This is a http operation. {"timestamp":"2024-10-25 11:29:51"}
verbose: This is a verbose operation. {"timestamp":"2024-10-25 11:29:51"}
debug: This is a debug operation. {"timestamp":"2024-10-25 11:29:51"}

logs/info.log内容如下:

js 复制代码
2024-10-25 11:29:51 info: This is a successful operation.
2024-10-25 11:29:51 error: This is an error operation.
2024-10-25 11:29:51 warn: This is a warning operation.

logs/error.log内容如下:

js 复制代码
2024-10-25 11:29:51 error: This is an error operation.

logs/warn.log内容如下:

js 复制代码
2024-10-25 11:29:51 error: This is an error operation.
2024-10-25 11:29:51 warn: This is a warning operation.

logs/http.log内容如下:

js 复制代码
2024-10-25 11:29:51 info: This is a successful operation.
2024-10-25 11:29:51 error: This is an error operation.
2024-10-25 11:29:51 warn: This is a warning operation.
2024-10-25 11:29:51 http: This is a http operation.

logs/verbose.log内容如下:

js 复制代码
2024-10-25 11:29:51 info: This is a successful operation.
2024-10-25 11:29:51 error: This is an error operation.
2024-10-25 11:29:51 warn: This is a warning operation.
2024-10-25 11:29:51 http: This is a http operation.
2024-10-25 11:29:51 verbose: This is a verbose operation.

logs/debug.log内容如下:

js 复制代码
2024-10-25 11:29:51 info: This is a successful operation.
2024-10-25 11:29:51 error: This is an error operation.
2024-10-25 11:29:51 warn: This is a warning operation.
2024-10-25 11:29:51 http: This is a http operation.
2024-10-25 11:29:51 verbose: This is a verbose operation.
2024-10-25 11:29:51 debug: This is a debug operation.

logs/silly.log内容如下:

js 复制代码
2024-10-25 11:29:51 info: This is a successful operation.
2024-10-25 11:29:51 error: This is an error operation.
2024-10-25 11:29:51 warn: This is a warning operation.
2024-10-25 11:29:51 http: This is a http operation.
2024-10-25 11:29:51 verbose: This is a verbose operation.
2024-10-25 11:29:51 debug: This is a debug operation.
2024-10-25 11:29:51 silly: This is a silly operation.
相关推荐
还是鼠鼠1 小时前
图书管理系统 Axios 源码 __删除图书功能
前端·javascript·vscode·ajax·前端框架·node.js·bootstrap
鸠摩智首席音效师4 小时前
PM2 restart 和 reload “–update-env“ 选项的使用
node.js
落日弥漫的橘_1 天前
Node.js下载安装及环境配置教程 (详细版)
前端·node.js·环境配置·node安装教程
16年上任的CTO1 天前
一文大白话讲清楚webpack进阶——9——ModuleFederation实战
前端·webpack·node.js·模块联邦·federation
skinGap1 天前
Node.js 中文编码问题全解析
node.js·jenkins·android-studio
前端杂货铺2 天前
Node.js——body-parser、防盗链、路由模块化、express-generator应用生成器
node.js·express
16年上任的CTO2 天前
一文大白话讲清楚webpack进阶——8——Module Federation
前端·webpack·node.js·模块联邦·federation
我命由我123452 天前
Tailwind CSS - Tailwind CSS 引入(安装、初始化、配置、引入、构建、使用 Tailwind CSS)
前端·javascript·css·npm·node.js·js
躲在没风的地方3 天前
vue框架技术相关概述以及前端框架整合
node.js·vue
小韩学长yyds3 天前
前端实战:小程序搭建商品购物全流程
javascript·css·vue.js·小程序·前端框架·node.js·html5