如何在 Spring 引导项目中使用 Azure 的 ApplicationInsight appender 设置 Log4j?
How to setup Log4j with Azure's ApplicationInsight appender in a Spring Boot project?
我有一个 Spring 启动 1.5.8
设置,带有 Log4j 用于日志记录。我使用 Azure Web 服务和 Azure 的 Application Insights 进行日志记录。
问题
- 如何使用
Logj4j
设置 Azure 以在 Spring 引导(即基于注释的配置)中拦截 HTTP 请求?
- 为什么我的自定义日志没有显示在 Application Insights 中?
首先,没有太多内容可以说明如何使用 Log4j
和 Application Insights 设置 Spring Boot
。我认为 Logback
上有一两个教程。
其次,在一个或多个版本的 Azure ApplicationInsights 库中似乎存在一些问题|错误(参见link 在末尾)。
要在 Spring 引导中启用 Request-level
到 Azure ApplicationInsights
的日志记录,我们需要按以下方式注册 ApplicationInsights
package com.sample;
import javax.servlet.Filter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import com.microsoft.applicationinsights.TelemetryConfiguration;
import com.microsoft.applicationinsights.web.internal.WebRequestTrackingFilter;
@Configuration
@ComponentScan("com.microsoft.applicationinsights.web.spring")
public class AppInsightsConfig {
private String insightsKey = "appInsightsKeyXX";
@Bean
public String telemetryConfig() {
if (insightsKey != null) {
TelemetryConfiguration.getActive().setInstrumentationKey(insightsKey);
}
return insightsKey;
}
@Bean
public FilterRegistrationBean aiFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new WebRequestTrackingFilter());
registration.addUrlPatterns("/**");
registration.setOrder(1);
return registration;
}
@Bean(name = "WebRequestTrackingFilter")
public Filter WebRequestTrackingFilter() {
return new WebRequestTrackingFilter();
}
}
以上是 annotation-config
等效于以下基于 XML 的配置
<filter>
<filter-name>ApplicationInsightsWebFilter</filter-name>
<filter-class>
com.microsoft.applicationinsights.web.internal.WebRequestTrackingFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>ApplicationInsightsWebFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
以上将配置记录所有 http
对应用程序洞察力的请求 - 一个基本的请求拦截器|过滤器。
我不得不坚持使用以下版本的 ApplicationInsights
罐子
// application insights dependencies
compile group: 'com.microsoft.azure', name: 'applicationinsights-core', version: '1.0.9'
compile group: 'com.microsoft.azure', name: 'applicationinsights-web', version: '1.0.9'
compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-log4j1_2', version: '1.0.9'
导航到此 tutorial 的评论部分,查看人们在 Log4j 1.2
和 Log4j2
中使用不同版本的 ApplicationInsights
时遇到的问题。对我来说只有 1.0.9
有效。
共享以防其他人遇到同样的问题。
@Raf 是的,以前版本的 Application Insights Java SDK 中的 Log4j 和 LogBack 存在错误。然而,随着 Maven 上最新的 SDK 2.0.0-BETA,我们已经解决了这个问题。请在此处查看发行说明。也非常感谢你放下这个例子。我会尝试将其包含在 Microsoft 文档存储库中。
https://github.com/Microsoft/ApplicationInsights-Java/releases/tag/v2.0.0-BETA
我有一个 Spring 启动 1.5.8
设置,带有 Log4j 用于日志记录。我使用 Azure Web 服务和 Azure 的 Application Insights 进行日志记录。
问题
- 如何使用
Logj4j
设置 Azure 以在 Spring 引导(即基于注释的配置)中拦截 HTTP 请求? - 为什么我的自定义日志没有显示在 Application Insights 中?
首先,没有太多内容可以说明如何使用 Log4j
和 Application Insights 设置 Spring Boot
。我认为 Logback
上有一两个教程。
其次,在一个或多个版本的 Azure ApplicationInsights 库中似乎存在一些问题|错误(参见link 在末尾)。
要在 Spring 引导中启用 Request-level
到 Azure ApplicationInsights
的日志记录,我们需要按以下方式注册 ApplicationInsights
package com.sample;
import javax.servlet.Filter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import com.microsoft.applicationinsights.TelemetryConfiguration;
import com.microsoft.applicationinsights.web.internal.WebRequestTrackingFilter;
@Configuration
@ComponentScan("com.microsoft.applicationinsights.web.spring")
public class AppInsightsConfig {
private String insightsKey = "appInsightsKeyXX";
@Bean
public String telemetryConfig() {
if (insightsKey != null) {
TelemetryConfiguration.getActive().setInstrumentationKey(insightsKey);
}
return insightsKey;
}
@Bean
public FilterRegistrationBean aiFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new WebRequestTrackingFilter());
registration.addUrlPatterns("/**");
registration.setOrder(1);
return registration;
}
@Bean(name = "WebRequestTrackingFilter")
public Filter WebRequestTrackingFilter() {
return new WebRequestTrackingFilter();
}
}
以上是 annotation-config
等效于以下基于 XML 的配置
<filter>
<filter-name>ApplicationInsightsWebFilter</filter-name>
<filter-class>
com.microsoft.applicationinsights.web.internal.WebRequestTrackingFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>ApplicationInsightsWebFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
以上将配置记录所有 http
对应用程序洞察力的请求 - 一个基本的请求拦截器|过滤器。
我不得不坚持使用以下版本的 ApplicationInsights
罐子
// application insights dependencies
compile group: 'com.microsoft.azure', name: 'applicationinsights-core', version: '1.0.9'
compile group: 'com.microsoft.azure', name: 'applicationinsights-web', version: '1.0.9'
compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-log4j1_2', version: '1.0.9'
导航到此 tutorial 的评论部分,查看人们在 Log4j 1.2
和 Log4j2
中使用不同版本的 ApplicationInsights
时遇到的问题。对我来说只有 1.0.9
有效。
共享以防其他人遇到同样的问题。
@Raf 是的,以前版本的 Application Insights Java SDK 中的 Log4j 和 LogBack 存在错误。然而,随着 Maven 上最新的 SDK 2.0.0-BETA,我们已经解决了这个问题。请在此处查看发行说明。也非常感谢你放下这个例子。我会尝试将其包含在 Microsoft 文档存储库中。
https://github.com/Microsoft/ApplicationInsights-Java/releases/tag/v2.0.0-BETA