linux

Linux环境下Node.js日志配置指南

小樊
40
2025-11-29 13:11:05
栏目: 编程语言

Linux环境下Node.js日志配置指南

一 基础方案与日志库选型

二 快速上手示例

// logger.js
const winston = require('winston');

const logger = winston.createLogger({
  level: process.env.LOG_LEVEL || 'info',
  format: winston.format.combine(
    winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    winston.format.errors({ stack: true }),
    winston.format.splat(),
    winston.format.json()
  ),
  transports: [
    new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
    new winston.transports.File({ filename: 'logs/combined.log' })
  ]
});

if (process.env.NODE_ENV !== 'production') {
  logger.add(new winston.transports.Console({
    format: winston.format.combine(
      winston.format.colorize(),
      winston.format.simple()
    )
  }));
}

module.exports = logger;
// logger-pino.js
const pino = require('pino');

const logger = pino(
  {
    level: process.env.LOG_LEVEL || 'info',
    timestamp: pino.stdTimeFunctions.isoTime
  },
  pino.destination('./logs/app.log')
);

// 开发时可在控制台美化输出
if (process.env.NODE_ENV !== 'production') {
  const pretty = require('pino-pretty');
  logger.info = (...args) => require('pino').info(pretty({ colorize: true }), ...args);
}

module.exports = logger;
// logger-log4js.js
const log4js = require('log4js');

log4js.configure({
  appenders: {
    out: { type: 'stdout' },
    app: {
      type: 'dateFile',
      filename: 'logs/app',
      pattern: 'yyyy-MM-dd.log',
      alwaysIncludePattern: true,
      daysToKeep: 90,
      compress: true
    }
  },
  categories: {
    default: { appenders: ['out', 'app'], level: 'info' }
  }
});

const logger = log4js.getLogger();
module.exports = logger;
LOG_LEVEL=debug node app.js

以上示例覆盖了控制台与文件输出、按级别分流、JSON 结构化、开发/生产差异化以及按日期滚动等常见需求。

三 日志轮转与保留策略

四 运行方式与系统日志集成

五 生产实践与注意事项

0
看了该问题的人还看了