2009-09-28 5 views
3

제목을 너무 길게 만들고 싶지는 않지만이 질문은 특히 NServiceBus 일반 호스트를 로컬 시스템으로 실행하도록 구성된 Windows 서비스 (TopShelf 덕분)로 실행하는 것을 말합니다. (Vista 컴퓨터에서)NServiceBus 일반 호스트에 대한 로깅을 활성화하려면 어떻게합니까

a previous question에서 나는 왜 PubSub 샘플을 Windows 서비스로 실행하기로 결정했는지 설명하여 NServiceBus가 현재하고있는 일을 완전히 증명할 수있는 서비스를 쉽게 중지하고 시작할 수 있습니다. 하기로되어있다.

어떤 이유로 Log4Net에 디스크에 아무것도 기록 할 수 없으므로 Log4Net (초보자) 구성 문제 일 수 있습니까?

아래는가는 추적의 어떤 종류를 얻을 내 무차별 시도 - 다음과 같이 내가 지금까지지고있어 모두 writen 파일입니다 :

C : \ 로그 \ < -GUID-> log4net. 로그인을 시도하는 동안 다른 두 펜더 예외를 던지고있다 것처럼 보인다

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" /> 
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" /> 
    <sectionGroup name="common"> 
     <section name="logging" type="Common.Logging.ConfigurationSectionHandler, NServiceBus.Core"/> 
    </sectionGroup> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> 
    </configSections> 

    <!-- in order to configure remote endpoints use the format: "[email protected]" 
     input queue must be on the same machine as the process feeding off of it. 
     error queue can (and often should) be on a different machine. 
    --> 

    <MsmqTransportConfig 
    InputQueue="worker2" 
    ErrorQueue="error" 
    NumberOfWorkerThreads="1" 
    MaxRetries="5" 
    /> 

    <UnicastBusConfig> 
    <MessageEndpointMappings> 
     <add Messages="Messages" Endpoint="messagebus" /> 
    </MessageEndpointMappings> 
    </UnicastBusConfig> 

    <common> 
    <logging> 
     <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, NServiceBus.Core"> 
     <arg key="configType" value="INLINE"/> 
     </factoryAdapter> 
    </logging> 
    </common> 

    <log4net debug="true"> 
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net"> 
     <param name="File" value="c:\logs\Subscriber2.log" /> 
     <param name="AppendToFile" value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="2" /> 
     <maximumFileSize value="100KB" /> 
     <staticLogFileName value="true" /> 
     <datePattern value="yyyyMMdd" /> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 

    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionpattern value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 

    <appender name="EventLogAppender" type="log4net.appender.eventlogappender"> 
     <applicationname value="Subscriber2.EndPointConfig_v1.0.0.0" /> 
     <layout type="log4net.layout.patternlayout"> 
     <conversionpattern value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 

    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 


    <root> 
     <level value="ALL" /> 
     <appender-ref ref="RollingLogFileAppender" /> 
     <appender-ref ref="EventLogAppender" /> 
     <appender-ref ref="ConsoleAppender" /> 
     <appender-ref ref="TraceAppender" /> 
    </root> 

    </log4net> 

    <appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 

    <system.diagnostics> 
    <trace autoflush="true"> 
     <listeners> 
     <add 
      name="textWriterTraceListener" 
      type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="c:\logs\log4net.log" /> 
     </listeners> 
    </trace> 
    </system.diagnostics> 

</configuration> 
+0

서비스가 실행되는 사용자 계정에 c : \ logs에 쓸 수있는 적절한 사용 권한이 있습니까? –

+0

Windows 서비스가 '로컬 시스템'으로 실행 중입니다. 다른 질문에 설명 된대로 나는 자신의 사용자 계정으로 실행되도록 설치하는 방법을 찾지 못했습니다. – rohancragg

+0

업데이트 : 올바른 해결책은 마커 인터페이스 IWantCustomLogging을 EndpointConfig 클래스에 추가해야한다는 것입니다. 지금 나는 너무 많은 로깅을 얻고있다. 하지만 최대 로깅 및 추적을 얻는 방법의 예제로 위의 구성을 남겨 둘 것입니다 ... – rohancragg

답변

7

NSB가 기본값으로 설정 파일에서 로그 설정을 선택하지 않습니다. 이렇게하려면 끝점 구성 클래스에서 IConfigureLogging을 구현하십시오. 여기

추가 정보 :이 도움이

http://tech.groups.yahoo.com/group/nservicebus/message/3655

희망!

/Andreas

+0

와우 안드레아스, 감사합니다 백만! 이것은 자리에있었습니다. 마커 인터페이스 IWantCustomLogging을 추가해야했습니다. 한 번 확인하면 분명합니다. 어쩌면 나는 그 중 하나를 적응 시키려고 시도하기 전에 모든 샘플을 시도해 보았어야했다 ;-) – rohancragg

1

로그인합니다. 귀하의 패턴에 %property{NDC}이 의심됩니다 - 패턴에서 제거하고 다시 시도하십시오.

당신의 패턴이 % 속성 {X}를 포함하는 경우

는 당신은 ABC가 LoggingEvent 인스턴스 또는 ThreadContext 또는 GlobalContext 중 하나입니다

ABC.Properties["X"] = /* some value */ 

과 같은 코드를 사용하여 키 "X"로 속성을 설정해야합니다. 당신은 키 "NDC"와 속성을 설정했지만, 내가하지 의심되는 경우 나도 몰라

...

+0

Thanks Vinay. 나는 이것들을 제거하고 롤링 파일 appender의 명명에 또 다른 오류를 수정했으나 여전히 로깅을 얻지 못하고있다. Visual Studio에서 응용 프로그램을 디버깅하고 Logger.Info() 행을 스테핑합니다. 매우 이상한 ... – rohancragg

관련 문제