10

「ボックス内」のさまざまなパターンに関するドキュメントを見つけるのに苦労しています。

%logger  
%level  
%timestamp  

もちろんサンプルページはありますが、それがオプションの完全なリストかどうかはわかりません。

また、アプリからロガーにMDCパラメーターを送信することも可能ですが、これには、構成の変更とは異なるコードの変更が含まれます。

%machineNameオプション、またはオプションはありmachineIPますか?問題は、Webファーム内のすべてのサーバーが同じデータベースログにログインしていることです。現在、1台のマシンから不均衡な数のメッセージが送信されていると考えています。

4

6 に答える 6

13
%property{log4net:HostName}
于 2009-06-17T14:41:40.343 に答える
12

私が偶然見つけたのは

<layout type="log4net.Layout.PatternLayout" value="${COMPUTERNAME}"/>

そして、それは機能しているようです --- これと他の提案されたオプションとの違いは何だろうか。お気に入り%property{log4net:HostName}

于 2009-06-17T14:56:35.100 に答える
3

マシン名を取得するクラスを作成します。

using System;
using System.IO;
using log4net.Layout.Pattern;

namespace YourNameSpace.Converters
{
    public class MachinePatternConverter : PatternLayoutConverter
    {
        protected override void Convert(TextWriter writer, log4net.Core.LoggingEvent loggingEvent)
        {
            writer.Write(Environment.MachineName);            
        }
    }
}

次に、log4net 構成を次のように設定します。

<layout type="log4net.Layout.PatternLayout">
    <converter>
      <name value="machine" />
      <type value="YourNameSpace.MachinePatternConverter" />
    </converter>
    <conversionPattern value="%date [%thread] %level %logger %machine" />
</layout>

このアプローチは再利用でき、必要な方法で情報を管理できるので気に入っています。たとえば、IPアドレスをログに記録したい場合は、同じことを行い、コンバーターを次のように作成します。

public class IPPatternConverter : PatternLayoutConverter
{
    protected override void Convert(TextWriter writer, log4net.Core.LoggingEvent loggingEvent)
    {
        if (HttpContext.Current == null)
            return;

        writer.Write(HttpContext.Current.Request.UserHostAddress);
    }
}

リンクの詳細: http://devstuffs.wordpress.com/2012/01/12/creating-your-own-pattern-layout-converter-for-log4net/

于 2011-12-08T16:14:38.730 に答える
2

PatternString APIを確認してください。パターンで %property を使用する必要があるようです。この記事も参照してください。アプリケーションの起動時にマシン名をグローバル コンテキストに挿入する必要がある場合があります。

于 2009-06-17T14:31:38.350 に答える
2

GlobalContext プロパティの追加に関するこの回答https://stackoverflow.com/a/2096452/1224858を使用して、これを機能させることができました。

クラスファイルに次のコードを追加しました。

log4net.GlobalContext.Properties["hostname"] = Environment.MachineName;

そして、構成ファイルでホスト名を参照でき、それが表示されます

<layout type="log4net.Layout.PatternLayout">
     <conversionPattern value="%date [%thread] %-5level %logger [%property{hostname}] - %message%newline" />
</layout>

お役に立てれば。

于 2012-02-24T00:36:51.133 に答える
0

興味深いことに、これは「コンパクトなパラメーター構文」だと思います。ここの最後のセクションをチェックしてくださいhttp://logging.apache.org/log4net/release/manual/configuration.html

于 2009-08-10T04:45:13.680 に答える