2016-07-27 59 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