You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nest.js Monorepo中New Relic日志转发失效问题排查求助

Nest.js Monorepo + Nest-Pino 日志无法转发到 New Relic 排查指南

1. 修复环境变量冲突

你的.env中设置了NEW_RELIC_NO_CONFIG_FILE=true,这会让New Relic代理忽略newrelic.js配置文件,仅使用环境变量加载配置。但你只设置了NEW_RELIC_APPLICATION_LOGGING_FORWARDING_ENABLED=true,未显式开启顶层的application_logging.enabled(默认值为false),这会导致日志转发功能未激活。

解决方法:

  • 要么移除NEW_RELIC_NO_CONFIG_FILE=true,让代理加载newrelic.js中的完整配置;
  • 要么在.env中添加NEW_RELIC_APPLICATION_LOGGING_ENABLED=true,确保日志转发的顶层开关打开。

2. 确认Nest-Pino日志输出到标准流

New Relic Node.js代理默认捕获stdout和stderr的日志,需确保Nest-Pino的日志输出没有被定向到文件或其他非标准流。

检查你的Nest-Pino配置,确保没有设置file或其他自定义输出路径,示例正确配置:

// src/main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Logger as PinoLogger } from 'nestjs-pino';

async function bootstrap() {
  const app = await NestFactory.create(AppModule, { bufferLogs: true });
  app.useLogger(app.get(PinoLogger));
  await app.listen(3000);
}
bootstrap();

3. 验证Monorepo启动时正确加载New Relic代理

在Monorepo中,每个服务的启动命令必须确保New Relic代理被前置加载,否则日志无法被拦截转发。

错误启动方式:

node dist/packages/api/main.js

正确启动方式(使用-r参数预加载New Relic):

node -r newrelic dist/packages/api/main.js

如果使用package.json的scripts,修改为:

{
  "scripts": {
    "start:api": "node -r newrelic dist/packages/api/main.js"
  }
}

4. 检查New Relic代理日志的错误信息

你的newrelic.js中已开启logging.level: 'trace',代理会生成详细日志。查看这些日志,搜索以下关键词定位问题:

  • application-logging:查看是否有转发失败的提示;
  • error:检查是否存在网络连接、权限或格式错误;
  • log event:确认代理是否成功捕获日志事件。

代理日志默认路径:

  • Linux/macOS: /var/log/newrelic/node_agent.log
  • Windows: C:\Program Files\New Relic\newrelic-node-agent\node_agent.log

5. 确认日志级别匹配

New Relic默认只转发info及以上级别的日志,需确保Nest-Pino的日志级别不低于info。检查你的Pino配置:

// app.module.ts
import { Module } from '@nestjs/common';
import { LoggerModule } from 'nestjs-pino';

@Module({
  imports: [
    LoggerModule.forRoot({
      level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
    }),
  ],
})
export class AppModule {}

6. 验证配置文件位置(针对Monorepo)

如果保留newrelic.js配置文件,需确保它位于服务启动时的工作目录。在Monorepo中,若你从根目录启动服务,配置文件放在根目录即可;若从子package目录启动,需将配置文件复制到子package目录,或通过环境变量NEW_RELIC_CONFIG_FILE指定路径:

NEW_RELIC_CONFIG_FILE=../../newrelic.js node -r newrelic dist/main.js

内容的提问来源于stack exchange,提问作者Muhammad Awais Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 21:20:20