Application Insights未向Azure发送带有附加异常对象的log4net日志消息

时间:2017-07-13 11:13:27

标签: c# log4net azure-application-insights

我们当前的项目包括一个ASP.NET应用程序以及一些较小的控制台应用程序。我们正在使用Microsofts Application Insights 进行ASP.NET应用程序的应用程序管理 现在,我们希望将 Application Insights 集成到控制台应用程序中,以便将我们的日志记录集中到Azure。 我们的遗留日志记录是使用 Log4Net 实现的。在控制台应用程序中配置 Application Insights Core 及其相应的Log4Net Appender后,我们可以按预期在Azure中看到我们的日志条目。来自控制台应用程序的每条日志消息都将发送到Azure,但获取我们附加对象的日志除外。例如,我们的严重级别为错误的日志消息包含作为第二个参数的异常对象:

Log.Error("This looks like an error", ex);

这些日志条目在Azure中根本不显示。它们仅在将异常对象放入消息时显示,如:

Log.Error($"This looks like an error. Exception: {ex}");

因此看起来Log4Net中的异常对象有一个大小限制,但实际消息没有?如果是这样,这可以以任何方式配置?因为改变了每个' Log.Error();'在整个项目中不是一种选择。

我们的ApplicationInsights.config文件:

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
   <InstrumentationKey>[Our key]</InstrumentationKey>
   <TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel"/>

   <TelemetryProcessors>
      <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
         <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
         <ExcludedTypes>Trace;Exception</ExcludedTypes>
      </Add>
   </TelemetryProcessors>
</ApplicationInsights>

修改:

Log4Net配置:

<!-- ... -->
<!-- Configuration of logfile and console appender -->
<!-- ... -->

<root>
  <level value="ALL" />
  <appender-ref ref="logfile" />
  <appender-ref ref="console" />
  <appender-ref ref="aiAppender" />
</root>

<appender name="aiAppender" type="Microsoft.ApplicationInsights.Log4NetAppender.ApplicationInsightsAppender, Microsoft.ApplicationInsights.Log4NetAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%message%newline" />
  </layout>
</appender>

其他appender没有问题。

3 个答案:

答案 0 :(得分:1)

我明白了。导致问题的原因是,只要将异常对象附加到Log4Net的任何日志记录方法:

Log.Error(message, exception);
Log.Warn(message, exception);
Log.Info(message, exception);

特定日志条目不作为跟踪处理,而是作为 Application Insights 中的异常处理。因此,调整Azure中 Application Insights 选项卡中的过滤器以显示例外就足够了。现在,我也能够在Azure中看到Log.Error(message, exception)条目。

我不知道为什么会这样处理,因为这会使第三方软件处理日志变得更加复杂(例如:异常没有明确的消息 Application Insights 等中的字段。)。

答案 1 :(得分:0)

您需要配置log4net,现在只需配置Application Insights。

要采取的步骤:

  • 配置log4net
  • 添加应用程序见解appender以让log4net登录到应用程序洞察

接下来我会看看你使用的版本。我看到你正在使用.net核心,它可能是针对其他版本的应用程序见解dll构建的。尝试获取最新版本的Microsoft.ApplicationInsights.Log4NetAppender。

Microsoft.ApplicationInsights.Log4NetAppender latest version

答案 2 :(得分:0)

只要您传递一个异常,无论您使用什么类型的日志记录方法,它都将被记录为一个异常。如果您希望将其记录为跟踪,则不应传递异常。哪个有意义