2017-07-13 16 views
1

現在のプロジェクトは、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> 

他のアペンダーに問題はありません。

+0

btw。 Serilogも同じことをしています - 例外を含むイベントはトレースとしてではなく例外として送信されます - https://github.com/serilog/serilog-sinks-applicationinsightsここには文書化されています。ログイベントのメッセージが失われ、例外のみがApp Insightsに送信されます –

答えて

0

私はそれを考え出しました。

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

specifcログエントリがトレースとしてではなく例外でのアプリケーションとして扱われていない:何が問題を引き起こしたことは、すぐにあなたはlog4netのの伐採方法のうちのいずれかに例外オブジェクトを追加していることでした洞察したがって、AzureのApplication Insightsタブのフィルタを調整して、の例外も表示するようにしてください。今私はAzureのLog.Error(message, exception)のエントリを見ることができます。

これは、このように処理され、なぜ私は、これはサードパーティ製のソフトウェアのログを処理するには、より複雑になるため(例えば、知らない:など、例外はアプリケーション洞察に明示メッセージフィールドがありません)。

+0

これは例外としてトレースとしてログを送信するための解決策を見つけましたか?私はあなたと同じ問題を抱えています。例外はApplication Insightに記録されますが、メッセージ部分は失われます。 –

+0

残念ながら。 – croxy

+1

私はApp Insightsに2つのイベントを送信することでこの問題を解決しました。例外を含むメッセージは別々に送信されます。例外としてのトレースと例外としてのメッセージ。 App Insightsでは、Operation_IDでTrace with Exceptionsに参加し、必要な結果を得ることができます。 –

0

log4netを設定する必要があります。これで、Application Insightを設定するだけです。

の手順が取る:

  • のconfigure log4netの
  • 洞察力は、私はあなたが使用したバージョンになりますアプリケーションの洞察

次へlog4netのログをできるようにアペンダアプリケーションを追加します。私はあなたが.netコアを使用しているのを見て、パッケージがアプリケーションの洞察のDLLの他のバージョンに対してビルドされている可能性があります。 Microsoft.ApplicationInsights.Log4NetAppenderの最新バージョンを入手してください。

Microsoft.ApplicationInsights.Log4NetAppender latest version

+0

Log4Netは既に構成されています。私の編集を見てください。 – croxy

+0

* Log4NetAppender *の最新の安定版(現在は2.2.0)がインストールされています。 * ApplicationInsights Core *の最新の安定版(2.4.0)だけでなく、 – croxy

関連する問題