如何在Spring Boot项目中使用Azure的ApplicationInsight appender设置Log4j?

时间:2018-01-04 06:59:40

标签: java spring-boot log4j log4j2 azure-application-insights

我使用Log4j进行Spring Boot 1.5.8设置以进行日志记录。我使用Azure Web服务和Azure的Application Insights进行日志记录。

问题

  1. 如何使用Logj4j设置Azure以在Spring Boot(即基于注释的配置)中拦截HTTP请求?
  2. 为什么我的自定义日志不会显示在Application Insights中?

2 个答案:

答案 0 :(得分:2)

首先,没有太多内容可展示如何使用Spring Boot和Application Insights设置Log4j。我认为Logback上有一两个教程。

其次,在Azure的ApplicationInsights库的一个或多个版本中似乎存在一些问题|错误(请参阅最后的链接)。

要在Spring Boot中启用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();
    }   
}

以上是以下基于XML的配置的annotation-config等效项

<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的评论部分,查看人们使用ApplicationInsightsLog4j 1.2Log4j2使用不同版本的1.0.9时遇到的问题。对我来说只有DictReader工作。

分享以防其他人遇到同样的问题。

答案 1 :(得分:1)

@Raf是的,以前版本的Application Insights Java SDK中存在Log4j和LogBack的错误。然而,随着Maven的最新SDK 2.0.0-BETA,我们解决了这个问题。请参阅此处的发行说明。还要非常感谢你放下这个例子。我会尝试将其包含在microsoft docs存储库中。

https://github.com/Microsoft/ApplicationInsights-Java/releases/tag/v2.0.0-BETA