You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Winston库在Node.js中将日志以JSON格式保存到本地并附示例

使用Winston在Node.js中保存JSON格式日志到本地

1. 安装Winston

先安装依赖包:

npm install winston
# 或者用yarn
yarn add winston

2. 核心实现代码

下面是完整的示例,创建Winston Logger实例,将日志以JSON格式写入本地文件:

const winston = require('winston');

// 创建Logger实例
const logger = winston.createLogger({
  // 日志级别:控制哪些级别的日志会被记录,默认从info开始
  level: 'info',
  // 组合日志格式:添加时间戳+输出JSON格式
  format: winston.format.combine(
    winston.format.timestamp({
      format: 'YYYY-MM-DD HH:mm:ss'
    }),
    winston.format.json()
  ),
  // 配置日志传输方式(本地文件)
  transports: [
    new winston.transports.File({
      // 日志文件路径及名称
      filename: 'logs/app.log',
      // 自动创建日志目录(如果不存在)
      createDir: true,
      // 单个日志文件最大容量(5MB),超过自动切割
      maxsize: 5242880,
      // 最多保留5个旧日志文件
      maxFiles: 5
    })
  ]
});

// 开发环境下,同时在控制台输出日志(方便调试)
if (process.env.NODE_ENV !== 'production') {
  logger.add(new winston.transports.Console({
    format: winston.format.simple()
  }));
}

// 示例:记录不同级别的日志
logger.info('用户登录成功', { userId: 123, username: 'john_doe' });
logger.error('数据库连接失败', { error: 'Connection refused', retryCount: 3 });
logger.warn('磁盘空间不足', { freeSpace: '10%' });

3. 关键配置说明

  • winston.format.json():核心配置,确保每条日志以独立JSON对象输出,方便后续解析。
  • timestamp:可选但推荐,给日志添加时间戳,便于问题排查时定位时间点。
  • transports.File:
    • filename:指定日志文件路径,建议放在专门的logs目录下,配合createDir: true自动创建目录。
    • maxsize/maxFiles:实现日志切割,避免单个文件过大,自动保留指定数量的历史日志。
  • 日志级别:Winston默认级别从低到高为debug、info、warn、error、fatal,通过level参数可过滤日志。

4. 自定义JSON格式(可选)

如果需要在日志中添加固定业务字段(如服务名、环境),可以自定义格式:

const customJsonFormat = winston.format.combine(
  winston.format.timestamp(),
  winston.format.printf(({ timestamp, level, message, ...meta }) => {
    return JSON.stringify({
      service: 'user-center',
      env: process.env.NODE_ENV || 'dev',
      timestamp,
      level,
      message,
      ...meta
    });
  })
);

// 在logger中使用自定义格式
const logger = winston.createLogger({
  level: 'info',
  format: customJsonFormat,
  transports: [new winston.transports.File({ filename: 'logs/app.log' })]
});

内容的提问来源于stack exchange,提问作者Franken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:06:24