2016-07-27 2 views
1

У меня есть ресурс Application Insights в Azure. В нашем приложении Java у нас есть файл log4j.xml, который записывает в несколько файлов журнала в зависимости от имени службы.Приложение Insights Log4j фильтр по имени файла журнала

Я добавляю приложение Application Insights к регистрации, и я могу видеть все журналы разных файлов журналов в ресурсе Application Insights. Тем не менее, я не могу фильтровать по имени файла журнала в Application Insights, поэтому журналы трассировки не являются полезными.

Есть ли способ получить имя файла журнала в свойствах событий ведения журнала? Таким образом, в AppInsights мы могли бы фильтровать по имени файла журнала и читать их, как если бы у нас были файлы журнала.

Edit: наш 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 для создания лог-файлов? Если это так, appenders не знают о других добавках, и нет простого способа сообщить 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

Смежные вопросы