現在のプロジェクトは、ASP.NETアプリケーションといくつかの小型コンソールアプリケーションで構成されています。我々は、ASP.NETアプリケーションのアプリケーション管理のために、Microsoft Application Insightsを使用しています。
コンソールアプリケーションでApplication Insightsを統合して、Azureへのログを一元化できるようにしたいと考えています。
レガシーログはLog4Netで実装されています。 Application Insight Coreとそれに対応するコンソールアプリケーションのLog4Net Appenderを設定すると、Azureのログエントリが期待どおりに表示されます。コンソールアプリケーションから来るすべてのログメッセージはAzureに送信されますが、追加のオブジェクトが追加されたログは除きます。例えば、2番目のパラメータとして例外オブジェクトが含まれている重大度レベルエラーとのログメッセージ:Application Insightsは、Azureに添付された例外オブジェクトを含むlog4netログメッセージを送信しません
Log.Error("This looks like an error", ex);
は、これらのログエントリは、Azureの中に全く表示されません。以下のようなメッセージに例外オブジェクトを置くとき、彼らにのみ表示されます:
log4netのから、例外オブジェクトではなく、実際のメッセージについてサイズの制限があるようLog.Error($"This looks like an error. Exception: {ex}");
だから、それはそう?もしそうなら、これは何らかの形で設定可能ですか?すべての '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>
他のアペンダーに問題はありません。
btw。 Serilogも同じことをしています - 例外を含むイベントはトレースとしてではなく例外として送信されます - https://github.com/serilog/serilog-sinks-applicationinsightsここには文書化されています。ログイベントのメッセージが失われ、例外のみがApp Insightsに送信されます –