2013-03-22 2 views
3

log4net은 log4net이 해당 파일을 모니터링 할 수 있으며 app/web.config 파일을 chaning하지 않고도 레벨을 변경할 수 있기 때문에 log4net에 대한 외부 구성 파일을 선호합니다. 나는 NServiceBus에서 그렇게하기 위해 약간 고심하고있다. 나는이 NServiceBus에서 작동하지 않습니다NServiceBus 및 Log4Net 외부 구성 파일

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "ApplicationName.log4net.xml", Watch = true)] 

의 AssemblyInfo.cs의 속성 (나는 NServiceBus을 사용하고 배치하는 내, 외부 설정이

<?xml version="1.0" encoding="utf-8" ?> 
<log4net> 
    <appender name="RollingFile" type="log4net.Appender.FileAppender"> 
    <file value="C:\Logs\NServiceBusApplication.log" /> 

    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%-5p %d{hh:mm:ss} %message%newline" /> 
    </layout> 
    </appender> 

    <root> 
    <level value="INFO" /> 
    <appender-ref ref="RollingFile" /> 
    </root> 
</log4net> 

그렇게하는 가장 쉬운 방법은 파일 여기에 사용하고 .Host.exe). 그럼 난 EndpointConfig에서 Configure.With 전에

SetLoggingLibrary.Log4Net(() => XmlConfigurator.Configure(log4netConfigUri)); 

를 호출했습니다. 이 log4net은 올바른 위치에서 config 파일을 읽습니다. 감시하지 않기 때문에 로그 수준을 변경할 때 응용 프로그램에 반영되지 않습니다.

다음 내가 다시 appSettings는

<appSettings> 
    <add key="log4net.Config" value="ApplicationName.log4net.xml"/> 
    <add key="log4net.Config.Watch" value="True"/> 
</appSettings> 

과 노력, log4net이를 읽고 이후 ApplicationName.log4net.xml를 읽고, 아직 그것을 보지 않습니다.

어떻게

  • (즉, log4net 설정이의 app.config 내에 있지 않은) 설정 파일의 형태로 외부 설정 파일을 읽어

    1. 에 NServiceBus.Host.exe을 사용 NServiceBus 서비스의 log4net를 구성 할 외부 설정 파일을 살펴보고 외부 설정 파일의 변경 사항을 반영하십시오.
  • +0

    있는지 확인하십시오 당신 엔드 포인트 구성에 IWantCustomLogging을 추가 하시겠습니까? –

    +0

    나는 두 번째 옵션에서 그렇게했다고 생각하지만 한 번 더 확인하고 알려 드리겠습니다. –

    +0

    [assembly : log4net.Config.XmlConfigurator (ConfigFile = "ApplicationName.log4net.xml", Watch = true)]은 IWantCustomLogging의 유무에 영향을 미치지 않습니다. 로그는 원하는 파일로 전달되지 않으므로이 설정은 아무런 영향을 미치지 않습니다. –

    답변

    6

    당신이 어셈블리 특성을 사용하는 경우는, 사용

    이 또한해야
    SetLoggingLibrary.Log4Net(); // no parameters 
    

    작업 :

    SetLoggingLibrary.Log4Net(() => XmlConfigurator.ConfigureAndWatch(log4netConfigFileInfo)); 
    

    또는이 :

    XmlConfigurator.ConfigureAndWatch(log4netConfigFileInfo) 
    SetLoggingLibrary.Log4Net(); 
    
    +0

    어셈블리 특성을 작동시키지 못했습니다. 호스트가 전혀 읽지 않는 것 같습니다. 그러나 ConfigureAndWatch 메서드를 사용할 수 있었고 작동했습니다. 감사. –

    +0

    [ConfigureAndWatch] (http://logging.apache.org/log4net/release/sdk/log4net.Config.XmlConfigurator.ConfigureAndWatch_overloads.html)는 Uri를 허용하지 않습니다. FileInfo 개체가 전달 될 것으로 예상합니다. –

    +0

    100 % 확신 할 수는 없지만 엔드 포인트가 별도의 appdomain에로드되는 방식 때문일 수 있습니다. 다행히 ConfigureAndWatch는 효과가있었습니다. –

    5

    NServiceBus> = 5.0에는 log4N에 대해 별도의 nugetPackage가 있습니다. 등 : NServiceBus.Log4Net

    대신 전화 : 프로그래밍 펜더를 구성하는 방법을

    log4net.Config.XmlConfigurator.Configure(); 
    LogManager.Use<Log4NetFactory>(); 
    

    또는에이 샘플을 참조하십시오 : SetLoggingLibrary.Log4Net(x => ...);

    다음 문을 사용 https://github.com/Particular/NServiceBus.Log4Net/blob/develop/src/Sample/LoggingConfig.cs

    +0

    좋아요, 작동합니다. –