本文档介绍了如何在 Spring Boot 项目中使用 Logback 将 MDC(Mapped Diagnostic Context)上下文值记录到 New Relic 中。通常,虽然 MDC 值可以在控制台和本地日志文件中正确显示,但可能无法在 New Relic 中看到。本文将提供配置步骤,确保 MDC 值能够正确地转发到 New Relic 代理,从而实现更全面的日志监控。
要将 MDC 上下文值记录到 New Relic,需要启用 New Relic 代理的配置,使其能够转发诊断上下文数据。这需要在 newrelic.yml 文件中进行配置。
打开或创建 newrelic.yml 文件,并添加以下配置:
common: &default_settings
# 转发诊断上下文到 New Relic 代理
forwarding:
context_data:
enabled: true这个配置片段告诉 New Relic 代理从日志事件中提取 MDC 数据,并将其作为属性附加到 New Relic 事件中。 enabled: true 确保了 MDC 数据的转发功能被启用。
以下是一个示例 Logback 配置文件 logback.xml,展示了如何配置 Logback 以使用 New Relic 提供的编码器和异步 Appender:
logs/logback-app.log false%X{request-id} %d %-5level [%thread] %logger{0}: %msg%n
关键点:
以下是一个简单的 Spring Boot 代码示例,展示了如何将值放入 MDC 上下文中:
import org.slf4j.MDC;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class ExampleService {
private static final Logger logger = LoggerFactory.getLogger(ExampleService.class);
public void processRequest(String requestId) {
MDC.put("request-id", requestId);
try {
logger.info("Processing request...");
// 模拟一些业务逻辑
} finally {
MDC.remove("request-id"); // 确保在请求处理完成后清除 MDC
}
}
}在这个例子中,MDC.put("request-id
", requestId) 将 request-id 放入 MDC 中。 MDC.remove("request-id") 确保在请求处理完成后,从 MDC 中移除该值,避免影响后续的请求。 务必使用 try-finally 块,确保 MDC 在任何情况下都能被清理。
通过启用 New Relic 代理的 forwarding.context_data.enabled 配置,并正确配置 Logback 使用 New Relic 提供的编码器和 Appender,你可以成功地将 MDC 上下文值记录到 New Relic 中。 这使得你可以更全面地监控你的应用程序,并更容易地诊断问题。记住要始终清理 MDC 上下文,并验证 New Relic 中是否正确显示了 MDC 数据。