我们当前的项目包括一个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没有问题。
答案 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。
要采取的步骤:
接下来我会看看你使用的版本。我看到你正在使用.net核心,它可能是针对其他版本的应用程序见解dll构建的。尝试获取最新版本的Microsoft.ApplicationInsights.Log4NetAppender。
Microsoft.ApplicationInsights.Log4NetAppender latest version
答案 2 :(得分:0)
只要您传递一个异常,无论您使用什么类型的日志记录方法,它都将被记录为一个异常。如果您希望将其记录为跟踪,则不应传递异常。哪个有意义