温馨提示×

怎么过滤Nodejs关键日志

小樊
36
2026-08-17 18:10:11
栏目: 编程语言

在 Node.js 中“过滤关键日志”常见有几种场景,不同场景做法不一样。下面按从简单到专业的方式给你总结,附示例。


一、最简单:用 console + 条件过滤(不推荐生产)

适合临时调试。

const LOG_LEVEL = 'error'; // 'info' | 'warn' | 'error'

function log(level, msg) {
  const levels = ['info', 'warn', 'error'];
  if (levels.indexOf(level) >= levels.indexOf(LOG_LEVEL)) {
    console[level](msg);
  }
}

log('info', '这是普通日志');
log('error', '这是错误日志');

✅ 优点:简单
❌ 缺点:功能弱、不可扩展


二、推荐方案:使用日志库(Winston)

1️⃣ 安装

npm install winston

2️⃣ 按日志级别过滤

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info', // 只输出 info 及以上级别
  transports: [
    new winston.transports.Console()
  ]
});

logger.info('普通信息');
logger.warn('警告');
logger.error('错误');

✅ 修改 level 即可过滤日志:

level 过滤结果
error 只显示 error
warn error + warn
info info + warn + error

三、按关键字 / 模块过滤(非常常见)

示例:只输出包含关键字的日志

const { createLogger, format, transports } = require('winston');
const { combine, printf } = format;

const keywordFilter = (keyword) =>
  printf((info) => {
    if (info.message.includes(keyword)) {
      return `${info.level}: ${info.message}`;
    }
    return '';
  });

const logger = createLogger({
  transports: [
    new transports.Console({
      format: combine(
        keywordFilter('订单')
      )
    })
  ]
});

logger.info('订单创建成功');
logger.info('用户登录成功'); // 会被过滤掉

✅ 适合:

  • 只关注某模块(订单、支付、登录)
  • 排查线上问题

四、按环境过滤(生产 / 开发)

const level = process.env.NODE_ENV === 'production' ? 'error' : 'info';

const logger = createLogger({
  level,
  transports: [new transports.Console()]
});

五、输出到不同地方(进阶)

transports: [
  new transports.File({ filename: 'error.log', level: 'error' }),
  new transports.File({ filename: 'combined.log' })
]

✅ 实现:

  • 错误日志单独存
  • 普通日志不过量输出

六、企业级推荐(最常用组合)

Winston + 日志级别 + 环境 + 文件拆分

const { createLogger, format, transports } = require('winston');

const logger = createLogger({
  level: process.env.LOG_LEVEL || 'info',
  format: format.combine(
    format.timestamp(),
    format.json()
  ),
  transports: [
    new transports.Console(),
    new transports.File({ filename: 'app.log' })
  ]
});

七、如果你用的是框架

框架 建议
Express morgan + winston
NestJS 内置 Logger 或 Winston
Koa koa-logger / winston

八、总结一句话

Node.js 过滤关键日志 = 选日志库 + 用级别 + 按关键字 / 模块过滤 + 按环境控制


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

  • ✅ 是 Express / NestJS / Koa / 原生 Node
  • ✅ 想过滤的是 错误 / 模块 / 关键字 / 请求日志
  • ✅ 是否用于 生产环境

我可以直接帮你写一套可复制粘贴的日志方案

0