2010-02-02 9 views

Odpowiedz

18

Zamówienie na BufferingForwardingAppender. Używamy tego, co przekazuje do RollingFileAppender. Pobiera zapisy i pozwala na kontynuowanie kodu bez czekania na zapis. Ustawiliśmy system oceny, aby wymusić spłukiwanie na progu WARN i ustawić wartość stratną na false, abyśmy nie przegapili żadnych wiadomości.

<appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender"> 
    <bufferSize value="512" /> 
    <lossy value="false" /> 
    <evaluator type="log4net.Core.LevelEvaluator"> 
     <threshold value="WARN"/> 
    </evaluator> 
    <appender-ref ref="RollingFileAppender" /> 
</appender> 
+0

Bardzo dobry pomysł. Nie próbowałem jeszcze, ale kiedyś. –

+2

Dokładnie to, czego nie wiedziałem, czego szukałem. – ctrlplusb

+0

Przetestowałem to w prostym projekcie internetowym i (zaskakująco) skalowalność się nie poprawia, jest raczej gorsze. ** Test **: 500 żądań/50 użytkowników dla 20 wierszy dziennika na żądanie. ** Wyniki **: Brak logowania: 278 odpowiedzi/s, Rolling File Appender: 129 req/s, buforowanie przekazywania z toczącym się plikiem: 76 req/s. – tozevv

5

można napisać odpowiednik log4net z NullAppender, co byłoby bardzo szybko ... (Ups - Początkowo myślałem, pytanie było o log4j; ta sama rada dotyczy jednak.)

Oczywiście, że byłoby miło” Zrobić cokolwiek pożytecznego - co prowadzi mnie do zastanawiania się, dlaczego tak bardzo zależy Ci na szybkości. Normalnym podejściem jest ustalenie, czego potrzebujesz, a następnie porównanie/profilowanie w celu sprawdzenia, czy działa poprawnie. Podejrzewam, że będziesz zapchany większą ilością danych, niż możesz z pożytkiem przetworzyć, zanim faktycznie stanie się wąskim gardłem. Czy masz znany problem z wydajnością podczas rejestrowania?

+0

Żaden problem z wydajnością nie jest związany z rejestrowaniem, ale ogólnie szukam poprawy wydajności aplikacji i dodałem log4Net do profilowania go w środowisku wykonawczym. Nie chcę, aby było to zbyt duże obciążenie, ponieważ aplikacja jest już powolna. Więc szukam aplikanta, który jest najszybszy. – Amitabh

+1

@Amitabh: Jeśli aplikacja jest już wolna, oznacza to, że rejestrowanie to * mniej * może mieć znaczący wpływ. Naprawdę, używaj tego, co najłatwiejsze do zalogowania, a potem po prostu loguj się sensownie. To najprawdopodobniej najszybszy sposób na zwiększenie ogólnej szybkości aplikacji. –

+0

Dodam, że czasami problemem nie jest to, jak wolno logować, ale jak inwazyjnie. Na przykład, jeśli logujesz się z wielu wątków, sama rejestracja może spowodować ich synchronizację, która wyłączy to, co chcesz zmierzyć. Typową odpowiedzią jest zalogowanie się do kolejki, która jest przetwarzana w jednym wątku. –

0

należy rozważyć

  1. pisanie do pliku jest znacznie szybsze niż pisanie pocieszyć
  2. Chyba problem jest z pre-produkcji (ceating danych dziennika, a następnie nie jest używany) użyj log.canLog, aby się upewnić, że możesz się zalogować, zanim utworzysz dane (zwykle jest to duży czas).
  3. Sprawdź, czy nie używasz wszystkich rodzajów pól, które są czasochłonne, jak aktualne poświadczenia użytkownika itp. .
Powiązane problemy