2011-07-26 168 views
3

同一程序的兩個實例配置爲記錄在不同的文件,這是我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 

但是,當第二個服務啓動,從第一個日誌開始被附加到第二個日誌中,並且該日誌不再使用。

如何使用log4net在Windows服務中正確地分隔日誌文件?

回答

0

根據記錄,這工作,但它不是我的測試反對,仍不能在我的服務工作,我只是將它張貼,希望能夠幫助別人,但:

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存儲庫配置(最有可能是默認的)。因此,當您更改log4net日誌文件名時,所有記錄器都會開始記錄到新的文件名。

我相信你需要爲每個你想同時激活的單獨的日誌文件配置不同的存儲庫。

對不起,我不能幫助更多,我現在正在努力解決幾乎相同的問題(其他更緊迫的問題)。

祝你好運!

編輯: 退房這個問題/答案的可能解決方案: how-to-stop-log4net-from-writing-to-two-separate-files

+0

這是一個應用程序的輸出分成兩個文件,我想單獨許多應用到許多日誌 – bevacqua

相關問題