2011-07-26 4 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