3

AdoNetAppenderを使用してメッセージをログに記録しています。メッセージパラメータに%property {log4net:HostName}変換パターンを追加しました。

<parameter>
      <parameterName value="@message"/>
      <dbType value="String"/>
      <size value="4000"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%property{log4net:HostName}] - %message"/>
      </layout>
</parameter>

出力は次のようなものです

[ホスト名]-fooバー。

しかし、私は次のような出力が必要です

[ホスト名] -fooバー。

変換パターンを使用してホスト名を大文字にするにはどうすればよいですか?

よろしく、

カンクット

4

2 に答える 2

4

Ron Grabowski によって提案された解決策は、PatternConverter を拡張することです。

public class HostNameToUpperConverter : PatternConverter
{
    protected override void Convert(TextWriter writer, object state)
    {
        string hostName = (string)GlobalContext.Properties[LoggingEvent.HostNameProperty];
        writer.Write(hostName.ToUpper());
    }
}

構成ファイルでの使用法:

<layout type="log4net.Layout.PatternLayout">
        <converter>
          <name value="hostNameToUpper" />
          <type value="MyApplication.HostNameToUpperConverter" />
        </converter>
        <conversionPattern value="[%hostNameToUpper] - %message" />
</layout>
于 2009-06-23T16:55:01.993 に答える
0

FWIW (おそらく他の誰かがこれを便利だと思うでしょう)、NLog 2.0 (およびおそらく 1.0 Refresh) は、レイアウトの出力の変更を可能にするいくつかのレイアウト「ラッパー」を追加しました。下の方にあるこのリンクを参照してください。

ラッパーの中には、大文字、小文字、トリム空白、パッド、およびその他のいくつかがあります。したがって、出力に含めるフィールドを指定するレイアウトを定義し、その全体または一部を「大文字」ラッパーで「ラップ」することができます。正確な構文はよくわかりませんが、他のレイアウトにレイアウトを含めることができるので、「ホスト名」のレイアウトを定義し、それを「大文字」ラッパーでラップしてから、そのレイアウトを最終レイアウトに含めることができます。 . 擬似コード (設定ファイルの擬似コードであり、コードの擬似コードではありません) (非常に擬似的です!):

var host=${gdc:hostname}
var uhost=${uppercase=true,inner=host}

uhost を「実際の」レイアウトに含めることができるようになりました。

${datetime} | ${uhost} | ${message}

または、次のようにすることもできます。

${datetime} | ${uppercase=true, inner=${gdc:hostname}} | ${message}

私は実際にNLogでこれを試していないことに注意してください.

于 2010-09-29T22:14:55.570 に答える