温馨提示×

Nodejs日志格式如何设置

小樊
45
2026-07-07 10:13:13
栏目: 编程语言

在 Node.js 中,日志格式的设置取决于你使用的日志库框架。下面按常见场景给你一个完整说明,从简单到规范。


一、使用 console(不推荐生产)

console.log('[INFO]', new Date().toISOString(), '服务启动')

✅ 简单
❌ 无级别、无结构化、不适合生产


二、使用 winston(最常用 ✅)

1️⃣ 安装

npm install winston

2️⃣ 基础日志格式设置

const winston = require('winston')

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.printf(({ timestamp, level, message }) => {
      return `${timestamp} [${level.toUpperCase()}] ${message}`
    })
  ),
  transports: [
    new winston.transports.Console()
  ]
})

logger.info('服务启动')

输出示例:

2026-01-21T10:30:00.000Z [INFO] 服务启动

3️⃣ JSON 格式(推荐用于生产 / ELK)

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

输出:

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

✅ 适合日志系统(Elasticsearch / Loki)


4️⃣ 带 traceId / requestId(微服务常用)

const logger = winston.createLogger({
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format((info) => {
      info.requestId = global.requestId || '-'
      return info
    })(),
    winston.format.json()
  ),
  transports: [new winston.transports.Console()]
})

三、使用 pino(高性能 ✅)

1️⃣ 安装

npm install pino

2️⃣ 基本格式

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

logger.info('服务启动')

输出(JSON):

{"level":30,"time":1700000000000,"msg":"服务启动"}

3️⃣ 自定义格式

const logger = pino({
  formatters: {
    log: (object) => {
      return {
        ...object,
        env: process.env.NODE_ENV
      }
    }
  }
})

四、Express / Koa 中设置日志格式

Express + morgan + winston

npm install morgan
const morgan = require('morgan')
const logger = require('./logger')

app.use(morgan('combined', {
  stream: {
    write: msg => logger.info(msg.trim())
  }
}))

五、日志格式推荐规范 ✅

生产环境推荐格式

{
  "timestamp": "2026-01-21T10:30:00.000Z",
  "level": "info",
  "service": "user-service",
  "requestId": "abc-123",
  "message": "用户登录成功",
  "userId": 1001
}

六、常见日志级别

级别 说明
error 错误
warn 警告
info 一般信息
debug 调试
trace 追踪

七、总结建议

开发环境:简单文本
生产 / 微服务:JSON + requestId
高并发:pino
通用:winston


如果你愿意,我可以帮你:

  • ✅ 设计一套 企业级日志规范
  • ✅ 配置 winston + ELK / Loki
  • ✅ 给你一个 Express / NestJS 日志模板

你现在用的是 Express / Koa / NestJS / 纯 Node.js

0