2017-06-16 6 views
1

NlogのFallbackGroupラッパーを使用して、フェールオーバーログを設定しています。私の最初のターゲットである "Network"ロガーが失敗/エラーを起こした場合、2番目のターゲット/フォールバックターゲット "EventLog"にログを記録する必要があります。しかし、私は私のコンソールアプリケーションを実行している間、私はそれが最初のものにログオンしようとしていると常に失敗することがわかりました。それは "EventLog"にログオンしようとしていません。 FYIでは、EventLogターゲットは孤立して正常に動作します(フォールバックの設定なし)。NLog - 予想通りにFallbackGroupが機能しない

私はNLogの "InternalLogging"を有効にすることで上記の詳細を得ています。これは基本的にすべてのNLog実行をファイルに書き込んでいます。

<configuration> 
<configSections> 
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> 
</configSections> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="true"> 
    <targets> 
     <!-- For logging over network with json layout --> 
     <target xsi:type="FallbackGroup" name="XXXFallBackLoggingGroup" returnToFirstOnSuccess="true"> 
      <target name="network" xsi:type="Network" address="https://XXXX/api/log"> 
       <layout xsi:type="JsonLayout"> 
        <attribute name="time" layout="${longdate:universalTime=true}" /> 
        <attribute name="level" layout="${level:upperCase=true}"/> 
        <attribute name="message" layout="${message}" /> 
       </layout> 
      </target> 
      <target xsi:type="EventLog" name="eventlog" source="xxxx" layout="${level:upperCase=true}${newline}${longdate:universalTime=true}${newline}${message}${newline}"/> 
     </target> 
    </targets> 
    <rules> 
     <logger name="*" minlevel="Trace" writeTo="XXXFallBackLoggingGroup" /> 
    </rules> 
</nlog> 

これは狂気私を運転している:

は、以下の私NLog configです。私はそれを修正するための多くの試みを与えているが、何も動作しません。任意のアイデア/提案や解決策、私に教えてください。

編集: ターゲットの名前を更新しようとしましたが、これも機能しませんが、前述したように、両方とも分離して動作しています。別のポイントは、フォールバックロギングをテストするために、私は自分のAPIを削除しました。最初のターゲットは常に404エラーを投げますが、NLogは常に最初のターゲットを選択しようとしています。

+0

投稿された設定(無効なURLを使用)を試みましたが、EventLogをコンソールに変更しました.NLog 4.4.10を使用してもうまく動作します。内部ログをもう少し調べるべきだと思います。 –

+0

わかりません。私が使用したコードで何が間違っているのですか。私は何度も内部ログを調べ、何も見つけられませんでした。しかし、もし私が何かを見逃してしまったら、もう一度見に行きます。しかし、NLogはAPIに投稿しようとしているだけですが、毎回404で失敗します。 – Sujith

+1

あなたの問題だと思ってください。信じられないネットワークターゲットは、ネットワークエラーがあるときだけ失敗しますが、HTTPリプライを返すときには成功します(reply-payloadにHTTPエラー404が含まれていても)。エンドポイントとしてWebServerを使用している場合は、WebServiceターゲットを使用する方がよいでしょう。 –

答えて

1

私はまったく同じ問題。私は、のthrowExceptionsアトリビュートがアクティブになったときに気付きます。それは例外をスローします(SQL Serverデータベースまたは他のターゲットにログオンすることはできません)。次に、プロセスを終了します。

この属性を削除すると、フェールオーバー構成が機能するはずです。

関連する問題