温馨提示×

如何过滤Nodejs日志内容

小樊
43
2026-08-02 14:41:24
栏目: 编程语言

在 Node.js 中过滤日志内容,常见做法有 代码层过滤日志库配置过滤运行时过滤日志采集端过滤。下面按使用场景给你一个完整说明。


一、使用日志库进行过滤(最推荐)

1️⃣ 使用 winston(最常用)

按日志级别过滤

const winston = require('winston');

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

logger.debug('调试信息'); // 不会输出
logger.info('普通信息');
logger.error('错误信息');

✅ 常用级别(从低到高):

debug < info < warn < error

按内容过滤(自定义 format)

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

const logger = createLogger({
  format: format.combine(
    format.printf(info => {
      if (info.message.includes('敏感词')) return null;
      return `${info.level}: ${info.message}`;
    })
  ),
  transports: [new transports.Console()]
});

2️⃣ 使用 pino(高性能)

const pino = require('pino');

const logger = pino({
  level: 'warn' // 只输出 warn+
});

logger.info('info'); // 不输出
logger.warn('warn');

二、按环境过滤日志

const logLevel = process.env.NODE_ENV === 'production'
  ? 'error'
  : 'debug';

const logger = winston.createLogger({
  level: logLevel
});

三、在代码中手动过滤(简单但不推荐)

function log(msg) {
  if (msg.includes('password')) return;
  console.log(msg);
}

❌ 缺点:侵入性强、难维护


四、运行时过滤(不修改代码)

1️⃣ 使用 DEBUG 环境变量(debug 库)

const debug = require('debug')('app');

debug('调试信息');

运行:

DEBUG=app node index.js

过滤多个模块:

DEBUG=app,api,db

2️⃣ 使用 grep 过滤输出

node app.js | grep -v "healthcheck"

✅ 适合临时排查问题


五、日志采集端过滤(生产环境)

如果你使用:

  • ELK / Elasticsearch
  • Loki
  • Fluentd
  • Filebeat

可以在采集或查询阶段过滤:

{
  "query": {
    "bool": {
      "must_not": {
        "match": {
          "message": "heartbeat"
        }
      }
    }
  }
}

六、常见过滤需求示例

✅ 过滤敏感信息

function sanitize(msg) {
  return msg.replace(/password=\w+/g, 'password=***');
}

✅ 只记录错误日志到文件

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

七、推荐实践 ✅

✅ 生产环境:

  • 使用 winston / pino
  • level + 环境 控制日志
  • 敏感字段脱敏
  • 输出到文件 + 日志系统

✅ 开发环境:

  • debug
  • console 输出

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

  • 用的 日志库
  • 过滤规则(级别 / 关键字 / 正则)
  • 是否 生产环境

我可以直接帮你写一份可用的配置代码。

0