2017-02-03 7 views
5

log4net 기능을 활용하여 정보를 기록하고 싶은 많은 수의 Worker Role 프로젝트가 있습니다. 불행히도 내 로그 중 아무 것도 내 출력 창에 실제로 나타나지 않습니다.WorkerRole log4net 출력 어 펜더 로그가 출력 창에 표시되지 않습니다.

는 I 디버거에 로그 라인을 통해 공정과, 상기 출력 창 대신에 다음 라인을 뱉어 :

'WaWorkerHost.exe'(CLR에 v4.0.30319 : RdRuntime)로드 'C를 : \ WINDOWS \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Runtime.Caching \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System.Runtime.Caching.dll '입니다. 로딩 기호를 건너 뜁니다. 모듈이 최적화되고 디버거 옵션 '내 코드 만 사용함'이 사용됩니다.

이 코드는 내 코드이므로이 예외가 표시되는 이유는 꽤 혼란 스럽습니다. 아래에있는 내 로깅의 app.config 설정입니다 :

<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="Montetary.Agents.HappyBirthday.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 
    <system.diagnostics> 
    <trace> 
     <listeners> 
     <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics"> 
      <filter type="" /> 
     </add> 
     </listeners> 
    </trace> 
    </system.diagnostics> 
    <log4net> 
    <appender name="AzureTraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <!-- can be any pattern you like --> 
     <conversionPattern value="%logger - %message" /> 
     </layout> 
    </appender> 
    <!-- does not have to be at the root level --> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="AzureTraceAppender" /> 
    </root> 
    </log4net> 

나는이 question의 예를 따르도록 시도했지만 결과는 내가 달성 할 수 있었다 같은

+0

어디에서 로그를 보려고합니까? Visual Studio 출력 창에는 보이지 않습니다. 저장소 계정에 연결하고 내가 읽은 블로그 당 "WADLogsTable" –

+0

을보고, traceappender는 로깅 할 때 출력 창에 다음을 작성해야합니다. http://interactivelogic.net/wp/2010/02/aspnet -logging-to-output-window-with-log4net/ –

+0

이것이 출력 로그에 쓰는 데 사용할 올바른 log4net appender가 아닌 경우 알려주십시오. 내 프로젝트를 하늘빛으로 업로드하기 전에 정확한 내용을 로그에 쓰고 싶습니다. –

답변

-1

했다.

작업자 역할 (대상 프레임 워크 : .NET Framework 4.5.2)을 사용하여 Azure 서비스를 만들고 작업자 역할에 log4net 버전 2.0.7을 추가로 추가했습니다.

log4net에 대한 다음 섹션 구성을 app.config에 다음과 같이 추가했습니다.

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 

log4net 섹션은 다음과 같습니다.

<log4net> 
    <appender name="AzureTraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <!-- can be any pattern you like --> 
     <conversionPattern value="%logger - %message%newline"/> 
     </layout> 
    </appender> 
    <!-- does not have to be at the root level --> 
    <root> 
     <level value="ALL"/> 
     <appender-ref ref="AzureTraceAppender"/> 
    </root> 
</log4net> 

지금까지 내가 한 모든 설정 파일은 구성 파일에서 구성한 것과 완전히 동일합니다.

private readonly ILog logger = LogManager.GetLogger("WorkerRole"); 

는 로그인 정보를 시도

log4net.Config.XmlConfigurator.Configure(); 

이 WorkerRole.c에서 클래스 수준에서 다음과 같은 작업자의 역할에 대한 로거를 만들기 WorkerRole.cs의 OnStart 방법의 첫 번째 줄에

구성 log4net OnStart, RunStand, RunAsync 등의 메쏘드가 있습니다.

//In OnStart 
logger.Info("From log4net : WorkerRole1 has been started"); 

//In OnStop 
logger.Info("From log4net : WorkerRole1 has stopped"); 

//In Run 
logger.Info("WorkerRole1 is running"); 

//In RunAsync 
logger.Info("From log4net : Working"); 

Development Storate 계정을 가리키는 WorkerRole을 실행하면 출력 창에 다음과 같이 로그 항목이 표시됩니다. Trace가 작성한 항목을 구별하기 위해 항목 앞에 "log4net :"접두사를 붙였습니다.

enter image description here

WorkerRole: WorkerRole - From log4net : WorkerRole1 has been started 

WaWorkerHost.exe Information: 0 : From log4net : WorkerRole1 is running 

WorkerRole: WorkerRole - From log4net : Working 

나는 당신이 당신의 코드에서 누락 될 수있는 부분이 OnStart으로하여 log4net를 구성을 할 수 있다고 생각. log4net.Config.XmlConfigurator.Configure(); 행을 OnStart 메쏘드에서 제거했을 때 출력 창에 log4net의 항목이 표시되지 않았습니다.

+0

TraceAppender가 이미 출력 창에 쓰는 이유는 내 구성의 복잡성을 줄이려고하는 이유입니다. Microsoft에서 제작 한 추적 도구를 사용하면 출력 창에 세부 정보가 나타납니다. 나의 이해에서 Log4net의 AzureTraceAppender는 진단 시스템에 전달되기 때문에 자동으로 출력 창에 나타납니다. log4net의 AzureTraceAppender가 방금 망가졌습니다. –

+0

나는 그것이 당신이 원하는 방식으로 작동한다고 생각합니다. 내 대답을 업데이트 할 시간을 좀주세요. –

+0

내 대답이 업데이트되었습니다. 이렇게하면 문제를 해결하는 데 도움이됩니다. –

1

몇 가지 확인할 수 있습니다

당신이 로그 파일에 당신이 쓰기 전에 구성 log4net 전화 마십시오 (한 번만 충분하다) :

log4net.Config.XmlConfigurator(); 

다음 일은가 플러싱 추가하는 것입니다 구성 :

<appender name="AzureTraceAppender" type="log4net.Appender.TraceAppender"> 
    <param name="ImmediateFlush" value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <!-- can be any pattern you like --> 
    <conversionPattern value="%logger - %message" /> 
    </layout> 
</appender> 

이렇게하면 메시지가 즉시 플러시됩니다.

디버깅을위한 모든 정보에 대해 Azure Diagnostics를 구성했는지 확인하십시오.

그런 다음 내부 log4net 디버깅을 디버깅 할 수 있습니다. internal debugging on this log4net faq page을 참조하십시오. 표준 그것은 당신이 구성한 수신기에 기록해야합니다. 추적 요소에 autoflush = "true"옵션을 추가하십시오. 또는 작성하고 액세스 할 수있는 작업자 역할의 디렉토리를 찾아 로그를 읽으십시오.

+0

감사합니다 피터, ImmediateFlush를 사용하여 출력이 출력 창으로 이동하는지 확인하려고합니다. –

+0

assemblyInfo에 XmlConfigurator를 추가했는데 immediateFlush가 포함되어 있지만 주사위는 여전히 작동하지 않습니다. log4net을 제거했으며 현재 작동중인 진단 도구를 직접 사용하고 있습니다. –