温馨提示×

Nodejs日志格式怎么修改

小樊
43
2026-07-18 20:15:02
栏目: 编程语言

在 Node.js 里“修改日志格式”常见于以下几种场景,不同方案略有差异。下面按最常见 → 进阶的方式给你总结。


一、使用 console.log / console.error(简单场景)

默认格式

console.log('hello');

自定义格式(封装一层)

function log(...args) {
  const time = new Date().toISOString();
  console.log(`[${time}] [INFO]`, ...args);
}

log('server start');

输出:

2026-01-21T10:30:00.000Z [INFO] server start

✅ 优点:简单
❌ 缺点:不适合大型项目


二、使用 winston最推荐生产方案

安装

npm install winston

自定义日志格式(核心)

示例:时间戳 + 级别 + 内容

const winston = require('winston');

const logger = winston.createLogger({
  format: winston.format.combine(
    winston.format.timestamp({
      format: 'YYYY-MM-DD HH:mm:ss'
    }),
    winston.format.printf(info => {
      return `${info.timestamp} [${info.level.toUpperCase()}] ${info.message}`;
    })
  ),
  transports: [
    new winston.transports.Console()
  ]
});

logger.info('服务启动');
logger.error('出错了');

输出:

2026-01-21 18:30:00 [INFO] 服务启动
2026-01-21 18:30:01 [ERROR] 出错了

常见格式插件

格式 作用
timestamp 时间
printf 自定义输出
json JSON 格式
colorize 控制台颜色
align 对齐
errors 打印错误堆栈

JSON 格式(适合 ELK / Loki)

format: winston.format.combine(
  winston.format.timestamp(),
  winston.format.json()
)

三、按环境区分日志格式(推荐)

const isDev = process.env.NODE_ENV === 'development';

const logger = winston.createLogger({
  format: isDev
    ? winston.format.combine(
        winston.format.colorize(),
        winston.format.simple()
      )
    : winston.format.combine(
        winston.format.timestamp(),
        winston.format.json()
      ),
  transports: [new winston.transports.Console()]
});

四、自定义日志字段(如 requestId / userId)

logger.info('用户登录', {
  userId: 1001,
  ip: '127.0.0.1'
});

结合 printf

winston.format.printf(info => {
  return `${info.timestamp} [${info.level}] ${info.message} ${JSON.stringify(info.meta || {})}`;
})

五、Express / Koa 请求日志格式

Express + morgan

npm install morgan
const morgan = require('morgan');

app.use(morgan('[:date[iso]] :method :url :status :response-time ms'));

六、常见日志格式推荐

开发环境

2026-01-21 18:30:00 [INFO] 服务启动

生产环境(JSON)

{
  "timestamp": "2026-01-21T10:30:00.000Z",
  "level": "info",
  "message": "服务启动",
  "service": "api"
}

七、总结一句话

Node.js 修改日志格式 = 使用日志库(推荐 winston) + format 组合

如果你愿意,可以告诉我:

  • ✅ 是否使用 Express / Koa / NestJS
  • ✅ 日志要输出到文件还是控制台
  • ✅ 是否对接 ELK / Loki / 云日志

我可以直接帮你写一套完整日志配置模板

0