2013-10-16 31 views
5

私のOSが動作しているOSのような静的な情報でログファイルを拡張したいのですが、log4net GlobalContext.Propertiesは一度だけ設定されます

作成されたファイルごとにこの情報を1回だけ挿入する方法はありますか?ログエントリごとに挿入する方法はありますか?

これは、現在、私はそれをやっている方法である(しかし、これは何度も何度も情報を出力することになる - それは静的な情報ので、必要に応じてイマイチいる)私の目的の効果はこのように見ているログファイルになります

GlobalContext.Properties["**evInfoOsPlatform**"] = string.Format("OS Platform: {0}", Environment.OSVersion.Platform); 

<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date{ABSOLUTE} [%thread] %level 
         %logger - %message%newlineOperating System Version: %property{ 
         **evInfoOsPlatform**}%newline%exception"/> 
</layout> 

Static information: 
OS Version: Windows 8.1.0101934 32-bit 
Culture Info: en-US 
Domainname: RandomDomain 
Username: Emil 
Userrights: Admin  

Messages: 
//now all the messages should be printed... 

このコードは、C#.Net 4.5 WPF環境で使用されます。

希望すると助かります。

答えて

1

あなたはRollingFileAppenderを使用している場合は、this questionを見てみましょう - 基本的に、あなたはRollingFileAppenderから継承したクラスを作成し、唯一の各ファイルに一度ヘッダを書き込むためのWriteHeaderメソッドをオーバーライドします。

This answerは一例で一緒にそれらを置くlog4net.Layout.PatternLayout

をサブクラス化することで、Headerプロパティを設定するための最良の方法を示しています

namespace MyAssembly.log4net.Header.Example 
{ 
    public class HeaderAppender : RollingFileAppender 
    { 
     protected override void WriteHeader() 
     { 
      if (LockingModel.AcquireLock().Length == 0) 
      { 
       base.WriteHeader(); 
      } 
     } 
    } 

    public class HeaderPatternLayout : PatternLayout 
    { 
     public override string Header 
     { 
      get 
      { 
       StringBuilder headerBuilder = new StringBuilder(); 
       headerBuilder.AppendLine("Static information"); 
       headerBuilder.AppendLine("OS Version: " 
          + Environment.OSVersion); 
       headerBuilder.AppendLine("Culture Info: " 
          + CultureInfo.CurrentCulture); 
       headerBuilder.AppendLine("[Etc] "); 
       headerBuilder.AppendLine(); 
       headerBuilder.AppendLine("Messages:");  

       return headerBuilder.ToString(); 
      } 
     } 
    } 
} 

は次のように設定を考える(あなたにアセンブリ名を設定する必要があります正しいもの):

これは結果のログファイルで、ヘッダ:

Static information 
OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1 
Culture Info: en-GB 
[Etc] 

Messages: 
Info Message 
Debug Message 
Etc 
関連する問題