2016-07-27 71 views
1

我在Azure中有一个Application Insights资源。在我们的Java应用程序中,我们有一个log4j.xml文件,它根据服务名称写入多个日志文件。应用程序洞察Log4j按日志文件名筛选

我将Application Insights appender添加到日志记录中,并且我能够在Application Insights资源中查看不同日志文件的所有日志。但是,我无法通过Application Insights中的日志文件名进行筛选,因此跟踪日志无用。

有没有办法让日志文件名进入日志事件属性?这样,在AppInsights中,我们可以通过日志文件名进行过滤,并将它们读取,就好像我们在那里有日志文件一样。

编辑: 我们的log4j.xml看起来像这样,与aiAppender在它应用的见解

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> 
<appender name="fileout" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="datePattern" value="'.'yyyyMMdd"/> 
    <param name="file" value="${app.install.home}/log/${app.server.name}-${app.service.process.host}.log"/> 
    <param name="append" value="true"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d %5p [%t] (%C) - %m%n"/> 
    </layout> 
</appender> 
<appender name="aiAppender" 
    class="com.microsoft.applicationinsights.log4j.v1_2.ApplicationInsightsAppender"> 
</appender>  
<root> 
    <priority value ="INFO" /> 
    <appender-ref ref="fileout"/> 
    <appender-ref ref="aiAppender" /> 
</root> 

+0

你使用某种类型的文件附加器,用于生成日志文件?如果是这样,appender不知道其他appender,并且没有简单的方法告诉AI appender该事件属于的文件。 尽管如此,您可以通过'device_Id'属性来分组,即属性是机器名称。 – yonisha

+0

@yonisha请参阅我对log4j.xml示例的编辑。我们使用DailyRollingFileAppender。所有的服务都在同一台机器上,所以device_Id过滤器对我们没有帮助。 – user1097108

回答

0

您可以实现一个TelemetryInitializer到服务名称添加到遥测属性,可以用于分组。

你遥测初始化应该像下面:

public class ServiceNameInitializer implements TelemetryInitializer { 
    @Override 
    public void initialize(Telemetry telemetry) { 
     if (telemetry instanceof TraceTelemetry) { 
      telemetry.getProperties().put("ServiceName", ServiceNameFromConfigurationOrProcessName); 
     } 
    } 
} 

注意,条件可以删除 - 这将属性添加到所有遥测类型。

一旦你已经实现了初始化,将其添加到configuration file,该TelemetryInitializers的元素:

<TelemetryInitializers> 
    . 
    . 
    <Add type="your.initializer.package.ServiceNameInitializer"/> 
</TelemetryInitializers> 
+0

这正是我们需要的!按照建议轻松工作。谢谢! – user1097108