2011-07-26 6 views
3

2つのインスタンスは、ここに私のlog4net.configで、別々のファイルに記録するように設定されていますlog4netのロギングは、同じプログラムの

<log4net> 
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="[%utcdate] %-5level %logger: %message%newline%exception"/> 
    </layout> 
    </appender> 

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString" value="Log/svc-%property{ServiceName}"/> 
    <appendToFile value="true"/> 
    <rollingStyle value="Date"/> 
    <datePattern value="'-'yyyy'-'MM'-'dd'.log'"/> 
    <staticLogFileName value="false"/> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="[%utcdate] %-5level %logger: %message%newline%exception"/> 
    </layout> 
    </appender> 

<root> 
    <level value="DEBUG"/> 
    <appender-ref ref="ConsoleAppender"/> 
    <appender-ref ref="RollingFileAppender"/> 
    </root> 
</log4net> 

そして、ここにあるどのようにインスタンスログ:

log = LogManager.GetLogger(ServiceName); 
    GlobalContext.Properties["ServiceName"] = ServiceName; 
    XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config")); 

今、サービスは "Service1" "Service10" "Service2"のようなものと呼ばれています。

私はサービス1が開始

と10、私がテストしてるものは、どちらも自分のログファイルを作成します。

svc-BettweenSvc1-2011-07-26.log 
svc-BettweenSvc10-2011-07-26.log 

しかし、第2のサービスが開始されたとき、最初の1からのログがあることを開始2番目のログに追加され、もう1つは使用されなくなります。

log4netを使用してWindowsサービスで別々のログファイルに正しくログする方法はありますか?

答えて

0

記録のために、これは動作しますが、それは私が反対テストしてるものではないのですが、それはまだ私のサービスでは動作しません。 2つのファイルにあるアプリケーションの出力を分離することである

namespace log4netMultiLogTester 
{ 
    public static class Program 
    { 
     public static void Main(string[] args) 
     { 
      if (args.Length == 0) 
      { 
       Process.Start(new ProcessStartInfo("log4netMultiLogTester.exe", "testApp1")); 
       Process.Start(new ProcessStartInfo("log4netMultiLogTester.exe", "testApp2")); 
      } 
      else 
      { 
       var logId = args[0]; 
       var log = LogManager.GetLogger(logId); 

       GlobalContext.Properties["ServiceName"] = logId; 
       XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config")); 

       log.Info("Starting log: {0}".FormatWith(logId)); 

       do 
       { 
        log.Info("Log: {0}, latest entry is {1}".FormatWith(logId,DateTime.Now.Ticks)); 
       } while (Console.ReadKey().Key != ConsoleKey.R); 
      } 
     } 
    } 

    public static class StringExtensions 
    { 
     public static string FormatWith(this string text,params object[] args) 
     { 
      return string.Format(text, args); 
     } 
    } 
} 
<log4net> 
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="[%utcdate] %-5level %logger: %message%newline%exception"/> 
    </layout> 
    </appender> 

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString" value="Log/svc-%property{ServiceName}"/> 
    <appendToFile value="true"/> 
    <rollingStyle value="Date"/> 
    <datePattern value="'-'yyyy'-'MM'-'dd'.log'"/> 
    <staticLogFileName value="false"/> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="[%utcdate] %-5level %logger: %message%newline%exception"/> 
    </layout> 
    </appender> 

<root> 
    <level value="DEBUG"/> 
    <appender-ref ref="ConsoleAppender"/> 
    <appender-ref ref="RollingFileAppender"/> 
    </root> 
</log4net> 
0

私は問題は、log4netリポジトリが1つしか設定されていない(おそらくデフォルトのもの)ということです。したがって、log4netログファイル名を変更すると、すべてのロガーが新しいファイル名にロギングを開始します。

同時にアクティブにするログファイルごとに別々のリポジトリを設定する必要があると思います。

私はもっと助けることができません、私は今、ほぼ同じ問題(他のより緊急の課題の中で)に苦しんでいます。

幸運を祈る!

編集: チェックアウトこの質問/可能なソリューションのための答え: how-to-stop-log4net-from-writing-to-two-separate-files

+0

が、私は多くのログに多くのアプリケーションを分けたい:にもかかわらず、私はうまくいけば他の人を助けるためにそれを投稿します – bevacqua

関連する問題