2017-02-03 33 views
5

Mam wiele projektów Rola pracownika, które chciałbym wykorzystać funkcję log4net do rejestrowania informacji. niestety żaden z moich dzienników nie pojawia się w moim oknie wyjściowym.WorkerRole log4net Logi śledzenia śledzenia nie pojawiają się w oknie wyjściowym

że etap na linii logu debugera i okno wyjściowe wypluwa następującą linię zamiast:

'WaWorkerHost.exe' (CLR v4.0.30319: RdRuntime) Załadowane „C: \ WINDOWS \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Runtime.Caching \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System.Runtime.Caching.dll '. Pominięto symbole ładowania. Moduł jest zoptymalizowany, a opcja debugowania "Just My Code" jest włączona.

Widząc, jak to jest mój kod, jestem bardzo zdezorientowany, dlaczego widzę ten wyjątek. Poniżej jest moje ustawienia app.config rejestrowania:

<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> 

próbowałem naśladować przykład w tym question, ale wynik był taki sam

+0

Gdzie próbujesz zobaczyć logi? Nie będą widoczne w oknie wyjściowym Visual Studio. Musisz połączyć się z kontem pamięci i przejrzeć tabelę "WADLogsTable" –

+0

na wiele blogów, które przeczytałem, traceappender powinien zapisać w oknie wyjściowym podczas logowania: http://interactivelogic.net/wp/2010/02/aspnet -logowanie-do-wyjścia-okna-z-log4net/ –

+0

jeśli to nie jest poprawny aplikator log4net do użycia do zapisu w logu wyjściowym, daj mi znać, wykorzystam cokolwiek. Chcę się upewnić, że piszę poprawne dane do dzienników zanim prześlę projekt do lazuru –

Odpowiedz

-1

udało mi się osiągnąć.

Utworzono usługę Azure z rolą roboczą (struktura docelowa: .NET Framework 4.5.2) i dodano do roli roboczy log4net wersję 2.0.7.

Dodano następującą konfigurację sekcji dla log4net, jak opisano poniżej w pliku app.config.

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

i log4net sekcja wygląd, jak następuje.

<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> 

Do tej pory wszystko, co zrobiłem, jest dokładnie takie samo, jak zostało skonfigurowane w pliku konfiguracyjnym.

skonfigurowanego log4net w pierwszej linii OnStart metody WorkerRole.cs

log4net.Config.XmlConfigurator.Configure(); 

Tworzenie logger dla roli pracownika, jak następuje na poziomie klasy w WorkerRole.c

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

Tried zalogowaniem informacje Metody OnStart, OnStop, Run i 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"); 

Uruchamianie WorkerRole wskazujące konto Development Storate, wyświetlane wpisy dziennika w oknie wyjściowym w następujący sposób. Aby rozróżnić wpisy zapisywane przez śledzenie, poprzedziłem wpisy "From log4net:".

WorkerRole: WorkerRole - From log4net : WorkerRole1 has been started 

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

WorkerRole: WorkerRole - From log4net : Working 

enter image description here

myślę, że część może być brakuje w kodzie może być skonfigurowanie log4net w OnStart. Po usunięciu linii log4net.Config.XmlConfigurator.Configure(); z metody OnStart przestał wyświetlać wpisy z log4net w oknie wyjściowym.

+0

fakt, że TraceAppender już zapisuje do okna wyjściowego, dlatego próbuję zmniejszyć ilość złożoności w mojej konfiguracji. kiedy używam narzędzi śledzenia utworzonych przez microsoft, szczegóły pojawiają się w oknie wyjściowym. Z mojego punktu widzenia, AzureTraceAppender w Log4net jest tylko przejściem do systemu diagnostycznego, więc powinien automatycznie pojawić się w oknie wyjściowym. AzureTraceAppender log4net jest po prostu uszkodzony. –

+0

Myślę, że mam to działa tak, jak chcesz. Daj mi trochę czasu, że zaktualizuję odpowiedź. –

+0

Zaktualizowałem swoją odpowiedź. To powinno pomóc w rozwiązaniu problemu. –

1

Istnieją pewne rzeczy można sprawdzić:

Czy nazywasz log4net skonfigurować zanim napiszesz do ciebie plik log (tylko jeden raz wystarczy):

log4net.Config.XmlConfigurator(); 

Następną rzeczą jest dodanie spłukiwania do Twoja konfiguracja:

<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> 

Spowoduje to natychmiastowe przepuszczenie wiadomości.

Upewnij się, że skonfigurowałeś Azure Diagnostics dla wszystkich informacji do debugowania.

Następnie można włączyć debugowanie wewnętrznego debugowania log4net. Zobacz internal debugging on this log4net faq page. Standardowy powinien logować się do skonfigurowanego detektora. Dodaj opcję autoflush = "true" do elementu śledzenia. Lub znajdź katalog w roli roboczej, do której możesz pisać i uzyskać dostęp do odczytu twoich dzienników.

+0

Dziękuję Peter, spróbuję użyć ImmediateFlush, aby sprawdzić, czy wyjście trafi do okna wyjściowego –

+0

Dodałem XmlConfigurator do assemblyinfo, i zawarłem DirectFlush, ale nie kości, nadal nie działa. Usunąłem log4net i teraz używam bezpośrednio narzędzi diagnostycznych, które działają. –