温馨提示×

Nodejs日志格式怎么改

小樊
45
2026-08-02 14:18:10
栏目: 编程语言

在 Node.js 里“改日志格式”要看你用的是什么日志方案。下面按常见场景给你一套从简单到规范的改法。


一、只用 console(最简单,不推荐生产)

默认格式是普通字符串,不好解析。

console.log('user login');

改成结构化日志(推荐)

const log = (msg, meta = {}) => {
  console.log(JSON.stringify({
    time: new Date().toISOString(),
    level: 'info',
    msg,
    ...meta,
  }));
};

log('user login', { userId: 1 });

输出:

{"time":"2026-01-21T10:00:00.000Z","level":"info","msg":"user login","userId":1}

✅ 适合:调试、小脚本
❌ 不适合:大型项目


二、用 winston(最常用)

1️⃣ 安装

npm i winston

2️⃣ 自定义日志格式(format)

const winston = require('winston');

const logger = winston.createLogger({
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.errors({ stack: true }),
    winston.format.json()
  ),
  transports: [
    new winston.transports.Console()
  ]
});

logger.info('user login', { userId: 1 });

输出:

{"level":"info","message":"user login","userId":1,"timestamp":"2026-01-21T10:00:00.000Z"}

3️⃣ 改成「自定义字符串格式」

winston.format.printf(({ level, message, timestamp }) => {
  return `${timestamp} [${level.toUpperCase()}] ${message}`;
})

完整示例:

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

输出:

2026-01-21 10:00:00 [info] user login

三、用 pino(高性能,推荐生产)

安装

npm i pino

基本用法

const pino = require('pino');
const logger = pino({
  level: 'info',
  timestamp: pino.stdTimeFunctions.isoTime
});

logger.info({ userId: 1 }, 'user login');

输出(JSON):

{"level":30,"time":1700000000000,"msg":"user login","userId":1}

改成「人类可读格式」

npm i pino-pretty
const logger = pino({
  transport: {
    target: 'pino-pretty',
    options: {
      colorize: true,
      translateTime: 'SYS:yyyy-mm-dd HH:MM:ss',
      ignore: 'pid,hostname'
    }
  }
});

输出:

2026-01-21 10:00:00 [info] user login

四、Express / Koa 日志格式

Express + Morgan

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

app.use(morgan('combined'));   // Apache 风格
app.use(morgan('dev'));        // 简短

自定义格式:

morgan(':method :url :status :response-time ms');

五、推荐总结

场景 推荐方案
小项目 console + JSON
普通后端 winston
高并发 pino
HTTP 请求日志 morgan
生产环境 JSON 格式日志

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

  • ✅ 用的是 Express / Koa / NestJS / 纯 Node
  • ✅ 想改成 JSON / 自定义字符串 / 带颜色
  • ✅ 是否需要 按日期切文件

我可以直接给你一份可直接用的日志配置模板

0