log4net
Rozwiązywanie problemów z Log4Net
Szukaj…
Wprowadzenie
Log4net to system rejestrowania awaryjnego. Fail stop oznacza, że przestaje rejestrować wewnętrzny wyjątek i zgodnie z projektem nie wchodzi w interakcje z przepływem programu. Wiedząc o tym, rozwiązywanie problemów z log4net nie jest takie łatwe. Jeśli logowanie się nie powiedzie, twój program nie zauważy. Widzisz wiele pytań na temat: dlaczego moje logowanie do log4net nie działa? W tym artykule wyjaśniono podstawowe rozwiązywanie problemów i najczęściej stosowane rozwiązania.
W większości przypadków pierwszym krokiem jest włączenie wewnętrznego debugowania dla log4net.
Włącz wewnętrzne debugowanie
Istnieją dwa sposoby włączenia wewnętrznego debugowania w log4net:
- Określ opcję log4net.Internal.Debug w pliku konfiguracyjnym aplikacji
- Programowo włącz wewnętrzny debugowanie log4net
Określ opcję log4net.Internal.Debug w pliku konfiguracyjnym aplikacji
Jest to preferowana metoda włączenia wewnętrznego debugowania, dodaj klucz log4net.Internal.Debug do pliku app.config twojej aplikacji.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
</configuration>
Rejestrowanie debugowania rozpocznie się natychmiast po uruchomieniu aplikacji.
Programowo włącz wewnętrzny debugowanie log4net
Drugi sposób to zrobić programowo. Ustaw właściwość log4net.Util.LogLog.InternalDebugging na true:
log4net.Util.LogLog.InternalDebugging = true;
Dane wyjściowe wewnętrznego dziennika debugowania
Wewnętrzne komunikaty debugowania są zapisywane w konsoli i w System.Diagnostics.Trace. Gdy musisz konsolować dane wyjściowe, możesz przekierować System.Console.Out. Lub możesz przekierować komunikat śledzenia do pliku:
<configuration>
...
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\tmp\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
...
</configuration>
Buforowane dołączające
Niektóre programy dołączające log4net są aplikacjami buforowanymi. Ci dołączający będą się logować tylko wtedy, gdy zarejestrowana zostanie pewna liczba wiadomości. Niektóre próbki to SmtpAppender, RemotingAppender lub AdoNetAppender. Ci dołączający mają ustawienie BufferSize:
<bufferSize value="100" />
Oznacza to, że logger zarejestruje się, gdy w buforze znajdzie się 100 wiadomości. Gdy chcesz przetestować moduł dołączający, możesz ustawić rozmiar bufora na 1.
Jeśli jesteś co bufor, który ma być opróżniony na błąd, możesz użyć ewaluatora:
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ERROR"/>
</evaluator>
Jeśli warunek oceniającego jest spełniony, bufor zostanie opróżniony.
Configure () nie wywoływany lub wywoływany wiele razy
Jeśli nie widzisz rejestrowania, możesz sprawdzić, czy w aplikacji jest wywoływane narzędzie Configure() . Najprostszym sposobem jest dodanie go jako atrybutu do zestawu:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
Następnie nie musisz dodawać log4net.Config.XmlConfigurator.Configure() dowolnym miejscu w konfiguracji. Lub możesz dodać log4net.Config.XmlConfigurator.Configure() w jednej ze swoich metod uruchamiania. Upewnij się, że wywołujesz konfigurację tylko raz.
Program dołączający pliki nie pisze
Jeśli masz program dołączający pliki, upewnij się, że piszesz w lokalizacji, w której użytkownik może tworzyć i aktualizować pliki. Jeśli nie, rejestracja się nie powiedzie. Możesz to sprawdzić, gdy masz włączone wewnętrzne debugowanie.