java - Application Insights Log4j 按日志文件名筛选

标签 java azure log4j azure-application-insights

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

我将 Application Insights 附加程序添加到日志记录中,并且可以查看 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>

最佳答案

您可以实现 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>

关于java - Application Insights Log4j 按日志文件名筛选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38620109/

相关文章:

logging - Log4j - 如何从 log4j 隐藏启动配置消息

java - 将图像制作为 "boundary"

java - 如何使用 java 8 stream api 迭代枚举值

Azure 容器实例由于拉取镜像时出现问题而失败

azure - 如何让 nUnit 单元测试与 Azure 管道中的 Xamarin.Forms 一起使用?

java - JTextArea 作为 log4j Logger 的监听器

java - SQLite 数据库 'does not implement interface'

java - Spring mvc 中表单发布后无法在 View 中获取值

azure - 使用 WCF 数据服务客户端进行 Azure 表存储 - 存储对象图

java - 如何在仍记录日志的同时向用户显示Java中的任何类型的错误?