2015-01-22 4 views
3

Windows 서비스에서 Castle log4Net 기능을 사용하려고합니다. 로그를 작성하지 못해 콘솔 앱을 만들어서 먼저 작동 시키려고했습니다. 아직 로그 파일이 작성되지 않았습니다. 내가 잘못했거나 기쁘게 생각한 것은 무엇 이었습니까?Castle Log4Net 기능이 기록되지 않음

namespace CastleLoggingFacilityWithLog4Net 
{ 
    class Program 
    { 
     private static IWindsorContainer _container; 

     static void Main(string[] args) 
     { 

      _container = new WindsorContainer(); 
      _container.Register(Component.For<IService>().ImplementedBy<Service>().LifestyleTransient()); 
      _container.AddFacility<LoggingFacility>(f => f.LogUsing(LoggerImplementation.Log4net)); 
      //_container.Install(FromAssembly.This()); 

      var service = _container.Resolve<IService>(); 
      service.TestLogging(); 
     } 
    } 

    public interface IService 
    { 
     void TestLogging(); 
    } 

    public class Service : IService 
    { 
     private ILogger logger = NullLogger.Instance; 

     public void TestLogging() 
     { 
      Logger.Info("this is a test"); 
     } 

     public ILogger Logger 
     { 
      get { return logger; } 
      set { logger = value; } 
     } 

    } 
} 

다음과 같이 log4net.config가 내 log4net의 설정을 추가 ...

<configuration> 
    <configSections> 
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
<log4net> 
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="logging\log.txt" /> 
    <appendToFile value="true" /> 
    <datePattern value="dd-MM-yyyy'.log'" /> 
    <staticLogFileName value="false" /> 
    <rollingStyle value="Date"/> 
    <maximumFileSize value="10MB" /> 
    <maxSizeRollBackups value="5" /> 
    <dateTimeStrategy type="log4net.Appender.RollingFileAppender+UniversalDateTime" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%utcdate %-5level %logger - %message%newline%exception" /> 
    </layout> 
</appender> 
<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingFile" /> 
</root> 
</log4net> 
</configuration> 
+0

서비스에서 Logger = NullLogger.Instance를 설정하는 이유는 무엇입니까? – wageoghe

+0

이 링크가 될 수도 있습니다. (http://stackoverflow.com/questions/2297282/logging-with-castle-facilities-logging-and-log4net) – prasy

+0

감사합니다. 이미 그 링크를 보았습니다. –

답변

1

내 코드 또는 구성에 문제가 없음을 알 수 있습니다. 문제는 log4net config가 출력 디렉토리로 복사하도록 설정되지 않았 음입니다! Castle이나 log4net 어느 누구도 로그 파일을 찾을 수 없다고 말할 수있었습니다.

+0

log4net은 요청할 때만 구성 오류에 대해 경고합니다 (log4net 내부 디버깅을 활성화하려면 어떻게합니까? 여기 : https://logging.apache.org/log4net/release/faq.html). 그렇지 않으면 조용하게 유지됩니다. – samy

+0

감사합니다. @samy는 훌륭한 팁입니다. –

0

당신은 로그 파일을 생성하기 위해 홈페이지()에서 아래의 코드를 추가 할 필요가,이 원인이됩니다 의 app.config에서 파일의 값에 따라 다음 configSource는

log4net.Config.XmlConfigurator.Configure(); 

편집 사용할 수 있습니다. 로그 파일을 ProgramFiles에 기록하지만 모든 사용자가 프로그램 파일에서 파일을 쓰고 편집 할 수있는 권한은 없습니다. 따라서 AppData에 로그 파일을 작성하는 것이 좋습니다.

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
<file value="${LOCALAPPDATA}\logging\log.txt" /> 
.... 
</appender> 
+0

이것은 옳지 않은 것처럼 보입니다. Castle의 log4net 통합에는 이미 log4net 구성 파일을 읽는 코드가 있습니다. 문제는 logger = NullLogger.Instance를 Service에 설정하는 것입니다. – wageoghe

+0

@wageoghe 나는 logger = NullLogger.Instance가 문제라고 생각하지 않는다.이 [link] (http://docs.castleproject.org/Default.aspx?Page=Logging-Facility&NS=Windsor&AspxAutoDetectCookieSupport=1)를 참조하기 바란다. – prasy

+0

나는 ' 오늘 새로운 무언가를 배웠습니다. 고마워요! – wageoghe

관련 문제