5

NLogを使用してエラーをログに記録しています。これが構成コードです

<target name="console" xsi:type="AsyncWrapper" >
      <target  xsi:type="ColoredConsole"  layout="${longdate:padding=-10}${callsite:className=false:includeSourcePath=false:methodName=false} | ${message}" >
         <highlight-row condition="level >= LogLevel.Info" foregroundColor="Green" backgroundColor="NoChange"/> 
      </target>
    </target>

ログイベントに次のようなカスタムプロパティを設定しています

private LogEventInfo GetLogEvent(string loggerName, LogLevel level, string message, ConsoleColor color)
        {
    var logEvent = new LogEventInfo(level, loggerName, message);

                logEvent.Properties["color"] = color;// color= any console color
}

これにより、「color」プロパティが設定されます(ここでは「Red」と言います)

そして私はこの「color」プロパティを次のようなターゲットで使用しようとしています

 <highlight-row condition="equals('${color}','Red')" foregroundColor="Red" backgroundColor="NoChange"/> 

このdosentの仕事と私は試しました

<highlight-row condition="equals('${event-context:item=color}','Red')" foregroundColor="Red" backgroundColor="NoChange"/> 

しかし、運はありません。

私は何かが足りないのですか、それともこれを行うためのより良い方法がありますか?この場合、レイアウトレンダラーを使用できますか?はいの場合、これをどのように実装しますか?

4

1 に答える 1

2

まず、 に値を格納しているため、 からLogEventInfo.Properties値を取得する 2 番目の構成例を使用する必要がありますevent-context

私は を使用していないColoredConsoleTargetので、これは提案として受け止めてください。

NLogConditionオブジェクトが列挙型を認識していないと思われますConsoleOutputColorConsoleOutputColorそのため、列挙型の値を に格納するLogEventInfo.Propertiesと、は(条件で) が を参照してConditionいることを認識しません。2 つの提案があります。'Red'ConsoleOutputColor.Red

最初のオプション: の文字列値をConsoleOutputColorin に格納しますLogEventInfo.Properties。を使用ToColorするだけで十分かもしれません。このようなもの:

var logEvent = new LogEventInfo(level, loggerName, message);
logEvent.Properties["color"] = color.ToString();

次に、あなたConditionの で、文字列値と比較できるはずConsoleOutputColorです (私が提案したように色名文字列を保存すれば、構成にあるものは正しいかもしれません)。

それがうまくいかない場合は、試すことができます...

2 番目のオプション:現在行っているようにConsoleOutputColor値を に保存しLogEventInfo.Propertiesますが、設定ファイルの条件を変更して、イベント コンテキストの「色」を値の数値と比較しConsoleOutputColorます。このようなもの(私はこれを試していないので、それが正しいかどうかはわかりません):

<highlight-row condition="equals('${event-context:item=color}','12')" foregroundColor="Red" backgroundColor="NoChange"/>

(ConsoleOutputColor列挙型では、Redis 12)。

于 2012-10-29T14:41:00.737 に答える