2010-12-16 13 views

Odpowiedz

3

Z witryny log4net: http://logging.apache.org/log4net/release/faq.html

nr log4net nie jest niezawodny. Jest to system do optymalnego wysiłku i zatrzymania awarii.

Przez fail-stop rozumiemy, że log4net nie będzie wyświetlał nieoczekiwanych wyjątków w czasie wykonywania, potencjalnie powodując awarię aplikacji. Jeśli z jakiegoś powodu log4net wyrzuci niezatapiany wyjątek (z wyjątkiem ArgumentException i ArgumentNullException, które mogą zostać rzucone), wyślij wiadomość e-mail na listę dyskusyjną [email protected] Niekontrolowane wyjątki są traktowane jako poważne błędy wymagające natychmiastowej uwagi.

Ja osobiście używam go przez cały czas i nigdy nie miałem problemu.

+0

Obawiam się, że przynajmniej ColouConsoleAppender zawiesi aplikację. Faktycznie spotykam jednego użytkownika: – user496949

+0

@ user496949: Napotkałem ten sam problem. Użyłem niewidocznego procesu i dołączam do ColorConsoleAppender. –

+0

Rzeczywiście rozwiązałem problem: proces wywołujący nie odczytał strumienia wyjściowego i ostatecznie strumień był "pełny". –

2

@ ralf.w. już pokazuje pełne objawy. Mogę przeformułować, ponieważ ostatnio spotkałem się z tym samym problemem.

  1. Należy opracować aplikację konsolową, która korzysta z narzędzia ColorConsoleAppender (lub ConsoleAppender) do drukowania dzienników.
  2. Utwórz kolejną aplikację (WinForms w moim przypadku), aby uruchomić tę konsolę (używając Process.Start). UseShellExecute = false, aby przekierować standardowe wyjście i błąd. CreateNoWindow = true. WindowStyle = Hidden.

Następnie na kilku komputerach (lub sesji pulpitu zdalnego), log4net zawiśnie aplikację konsoli, aw hang wysypisk widać to dziwnie czeka na zapis do strumienia, aby zakończyć.

Trudny do odtworzenia na normalnej maszynie (takiej jak moja), tak trudny do dalszego zbadania, chociaż log4net jest open source.

Obejście problemu może być tak proste, jak pokazanie aplikacji konsoli jako zminimalizowanej (zamiast ukrytej) i/lub zmienić inne ustawienia ProcessStartInfo.

+1

Widzimy coś podobnego. Ustaliliśmy, że log4net (i/lub Windows) buforuje do 4KB wyjścia na stdout/stderr. Po zapełnieniu bufora kolejne połączenia będą zawieszane. Jeśli więc proces A uruchamia proces B, a proces B loguje się do konsoli, a proces A nie odczytuje stdout z uruchomionego procesu (proces B), proces B zawiesza się po wypełnieniu bufora. Włączenie przekierowania rozwiązuje problem. Mając odczyt z procesu A, stdout również rozwiązałby problem. – Jimothy

+0

@Jimothy rozwiązałeś dla mnie problem;) Thx. – nozzleman

Powiązane problemy