配置Winston日志:本地环境禁止向New Relic发送日志
解决Winston在localhost环境下不向New Relic发送日志的问题
方案1:初始化时按需添加New Relic传输器
如果你的Winston日志是通过winston-newrelic传输器发送到New Relic的,最简洁的方式是仅在非localhost环境下加载该传输器:
import { createLogger, format, transports } from 'winston'; import NewRelicTransport from 'winston-newrelic'; export const logger = createLogger({ format: format.combine(format.timestamp(), format.json()), transports: [ new transports.Console(), // 仅当环境不是localhost时,添加New Relic传输器 ...(process.env.NODE_ENV !== 'localhost' ? [ new NewRelicTransport({ apiKey: process.env.NEW_RELIC_API_KEY, serviceName: process.env.NEW_RELIC_SERVICE_NAME }) ] : []) ], exitOnError: false });
方案2:初始化后动态移除New Relic传输器(适配你提供的代码结构)
如果日志器初始化时已经包含了New Relic传输器,可在localhost环境下过滤掉该传输器:
import { createLogger, format, transports } from 'winston'; import NewRelicTransport from 'winston-newrelic'; export const logger = createLogger({ format: format.combine(format.timestamp(), format.json()), transports: [ new transports.Console(), new NewRelicTransport({ /* 你的New Relic配置项 */ }) ], exitOnError: false }); if (process.env.NODE_ENV === 'localhost') { // 过滤掉所有New Relic类型的传输器 logger.transports = logger.transports.filter( transport => !(transport instanceof NewRelicTransport) ); // 若无法通过实例判断,也可通过传输器名称识别: // logger.transports = logger.transports.filter(t => t.name !== 'newrelic'); }
特殊情况:New Relic SDK自动集成场景
如果日志是通过New Relic Node.js SDK自动捕获转发的,而非手动添加Winston传输器,可直接禁用New Relic的日志收集:
if (process.env.NODE_ENV === 'localhost') { // 通过环境变量禁用日志收集 process.env.NEW_RELIC_LOG_ENABLED = 'false'; // 或直接修改New Relic配置 require('newrelic').config.logging.enabled = false; }
注意:确认process.env.NODE_ENV的取值大小写一致(比如避免写成Localhost或localhost不匹配的情况)。
内容的提问来源于stack exchange,提问作者asim mehmood
相关产品推荐
相关产品推荐

