log4net kontra TraceSource [zamknięte]

W Ten wątek Wiele osób wskazało, że używa log4net. Jestem fanem TraceSources i chciałbym wiedzieć, dlaczego log4net jest używany.

Oto dlaczego lubię trace sources:

  • Pluggable listeners-XML, TextFile, Console, EventLog, roll your own
  • konfigurowalne przełączniki śledzenia (error, warning, info, verbose, start, end, custom)
  • konfigurowalna konfiguracja
  • blok aplikacji logowania jest po prostu dużym zestawem TraceListeners
  • korelacja działań / zakresów (np. powiązanie wszystkich dzienników w ASP.NET zapytanie u danego Klienta
  • przeglądarka śledzenia usługi pozwala wizualizować zdarzenia według tych działań indywidualnie
  • Wszystko jest konfigurowalne w aplikacji.config / web.config.

Ponieważ. NET Framework wewnętrznie używa TraceSources, daje mi również spójny sposób konfigurowania tracing-z log4net, muszę skonfigurować log4net, jak również TraceSources.

Co daje mi log4net, że TraceSources nie (lub nie można tego zrobić pisząc kilka niestandardowych Traceli)?

Author: Community, 2009-02-23

5 answers

Myślę, że log4net robi dla mnie wszystko, co wymieniłeś.

Pluggable listeners brzmi jak appenders - jest ich wiele, a w rzeczywistości nawet zhakowałem plik dziennika, aby zawsze kończyć .log (dla skojarzeń plików), dodano pole cc do aplikacji e-mail i wreszcie dostroiłem Moje ulubione wartości dla aplikacji kolorowej konsoli. Jeśli Mogę być taki odważny - moje kolorowe szczęście konsoli:

<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
<!-- Can Use:
        Blue
        Green
        Red
        White
        Yellow
        Purple
        Cyan
        HighIntensity
        -->
<mapping>
  <level value="FATAL" />
  <foreColor value="Yellow, HighIntensity" />
  <backColor value="Red" />
</mapping>
<mapping>
  <level value="ERROR" />
  <foreColor value="White" />
  <backColor value="Purple, HighIntensity" />
</mapping>
<mapping>
  <level value="WARN" />
  <backColor value="Blue" />
  <foreColor value="White" />
</mapping>
<mapping>
  <level value="INFO" />
  <backColor value="Green" />
  <foreColor value="White" />
</mapping>
<mapping>
  <level value="DEBUG" />
  <foreColor value="White" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
  <!--<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />-->
  <!--<conversionPattern value="%-5level %file:%line - %message%newline" />-->
  <conversionPattern value="%level %logger:%line %newline     %message%newline" />
</layout>

Konfigurowalne przełączniki śledzenia: Log4net jest dostarczany tylko z FATAL Błąd ostrzega informacje debugowania w kolejności zwiększenia szczegółowości. Brakuje mi tylko kontroli, kto-zrobił-co.

Konfigurowalna konfiguracja: używam log4net.plik konfiguracyjny, który Ładuję w czasie wykonywania (lub zapisuję log do c:\ marudzenie, że nie mogę znaleźć config.)

    Try
        ' Get log4net configuration from file
        Dim logConfigFile As FileInfo
        logConfigFile = New FileInfo(".\log4net.config")

        If logConfigFile.Exists Then
            XmlConfigurator.Configure(logConfigFile)
        Else
            CreateEmergenceLogFile(logConfigFile.FullName)
        End If

    Catch ex As Exception
        Console.Out.WriteLine("Could not load the log4net config file")
    End Try
Po prostu duży zestaw Tracelistenerów: przepraszam, że go pomijam-wierzę ci na słowo.

Korelacja działań/ zakresów: czy masz na myśli, że każdy plik (Klasa odczytu) otrzymuje własny log, który może mieć oddzielne progi poziomu dziennika. W rzeczywistości można segregować logowanie nawet w jednej klasie (która w rzeczywistości może wzrosła do zbyt wiele ...)

W pliku klasy:

    Private Shared _logger As log4net.ILog = _
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)

Private Shared _loggerAttribute As log4net.ILog = _
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName & ".Attribute")

Private Shared _loggerCache As log4net.ILog = _
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName & ".Cache")

Przeglądarka śledzenia usług: w log4net.config:

  <logger name="NipissingU.ADWrapper.EntryTools.Attribute">
    <level value="INFO" />
  </logger>
  <logger name="NipissingU.ADWrapper.EntryTools.Cache">
    <level value="WARN" />
  </logger>

Wszystko jest konfigurowalne w aplikacji.config / web.config: no może to dobrze w ASP.NET, Nie wiem, ale przy tworzeniu aplikacji liczących klientów Lubię osobny plik konfiguracyjny.

Wszystko tutaj jest tylko moim małym sztuczki użytkowania.

Hth, - Mike

 9
Author: Mike Bonnell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-23 04:47:38

W bardzo wczesnych dniach (. NET 1.0) śledzenie w. NET Framework było dość ograniczone.

Na przykład partycjonowanie TraceSource nie pojawiło się przed. NET 2.0 i miałeś tylko cztery poziomy (Error, Warning, Information, Verbose), chociaż możesz użyć pół tuzina przełączników logicznych do partycjonowania, jeśli chcesz.

Log4j jest popularny w Javie, więc ma wiele wsparcia dla portu. NET, a kiedy stał się popularny, tak jakby pozostał, mimo że ludzie nawet go nie używają prawidłowo (np. zawijając go w singleton logger i tracąc jego główną cechę).

Mimo to myślę, że log4net i inne frameworki (np. NLog, Common.Logging, a nawet EntLib) poszło w złą stronę, wdrażając własny system logowania od podstaw, tzn. zmieniając nawet sposób pisania instrukcji dziennika w pierwszej kolejności.

Bardzo bym wolał, aby zobaczyć wysiłek, zwłaszcza, że. NET 2.0, włożył w rozszerzenie solidnej podstawy tego, co jest już w. NET. dla projektu to rozszerza to, co już istnieje, spójrz na projekt Essential Diagnostics na CodePlex (http://essentialdiagnostics.codeplex.com/).

Niektóre mocne strony log4net:

  • Jest to podobne do log4j, jeśli uruchamiasz środowisko mieszane i chcesz spójnego logowania.

  • Automatyczna hierarchia rejestratorów, która dziedziczy ustawienia, jest całkiem zgrabna w porównaniu z liczbą źródeł śledzenia, które implementujesz i musisz skonfigurować. (chociaż prawdopodobnie przesada w niektórych przypadkach).

  • Log4net ma już około 28 appenderów (odpowiednik trace listeners), natomiast System.Diagnostyka ma tylko 10 (ale patrz zasadniczy.Projekt diagnostyczny dla więcej), więc jeśli naprawdę uważasz, że możesz potrzebować RemoteSyslogAppender, NetSendAppender, AnsiColorTerminalAppender lub TelnetAppender, to masz szczęście.

Wady (w porównaniu do systemu."Diagnostyka": {]}

  • Musisz użyć innej składni logowania, więc jeśli jesteś już korzystam ze źródła.TraceEvent (), musisz przejść i wszystko zastąpić.

  • Dotyczy to również innej składni korelacji, więc musisz zmienić contexts z CorrelationManager na log4net.

  • Nie łatwo integruje się z Framework tracing (np. WCF).

  • Słaba obsługa identyfikatorów zdarzeń (trzeba użyć oddzielnego projektu rozszerzenia IEventLog).

  • Nie obsługuje jeszcze śledzenia zdarzeń dla systemu Windows (Vista) lub Przeglądarka śledzenia usług w formacie XML.

 54
Author: Sly Gryphon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-30 13:41:05

Innym powodem używania TraceSources zamiast Log4Net jest śledzenie samego siebie: Log4Net może być używany tylko do logowania (wiadomości), ale jak śledzić obiekt (wiele informacji w tym samym czasie)? Oczywiście Log4Net ma dużo słuchaczy, ale czy to wszystko jest mi potrzebne? W większości przypadków nie. A jeśli potrzebuję specjalnego słuchacza, to nie jest tak trudno zaimplementować własnego, prawda? Na przykład potrzebuję słuchacza do śledzenia w bazie danych (nie tylko wiadomości, ale różne informacje {string ' s, int itp. w tym samym czasie).

Mam rację?

 4
Author: Mogerli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-28 09:07:07

Powód, dla którego wolę Log4Net od używania Trace one of targeting - dzięki Log4Net mogę niezależnie instrumentować różne warstwy mojej aplikacji (dostęp do danych, Usługi, logika biznesowa itp.) i różne podsystemy (uwierzytelnianie, przetwarzanie itp.) i włączać/wyłączać logowanie każdego podsystemu niezależnie.

Ten flexibilty pozwala mi skonfigurować szczegółowe Logowanie dla jednego podsystemu bez włączania firehose dla całego systemu.

Statyczne metody podane w klasie Trace [takiej jak TraceInformation()] nie podajemy sposobu na określenie, z którego podsystemu jest rejestrowane, więc nie jest to coś łatwego, pisząc mój własny TraceListener.

Innym powodem jest wydajność-są fragmenty mojej aplikacji, które potencjalnie rejestrują kilka tysięcy wiadomości na sekundę. Log4Net narzuca niskie koszty. Dla kontrastu, kiedy ostatnio na to patrzyłem, blok aplikacji rejestrującej przeparfował swoją konfigurację XML dla każdej zarejestrowanej wiadomości, dzięki czemu blok bardzo ciężki i powolny.

 3
Author: Bevan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-23 04:03:16

Podczas gdy Im tylko wtajemniczony w sposób, w jaki działa log4net, oczywistą zaletą korzystania z tego frameworka jest natychmiastowa znajomość tych, którzy używają log4j.

Kolejną niewielką korzyścią jest to, że rejestrowanie jazdy testowej za pomocą log4net jest niezwykle proste; rejestratory implementują log4net.ILog. Znowu nie jestem zaznajomiony z rozwiązaniem Microsoft, ale zastanawiam się, jak można to zrobić bez wcześniejszego napisania fasady do systemu.Diagnostyka.Klasa śledzenia.

Z pobieżnym spojrzeniem na źródła śladowe dokumentacji, nie mogłem znaleźć odpowiednika dla layoutów i chciałbym wiedzieć, czy taki odpowiednik istnieje. Patternayout jest bardzo przydatny do formatowania wpisów dziennika z typowymi danymi, takimi jak datestamps, thread info, log context itp. Log4net PatternLayout docs: http://logging.apache.org/log4net/release/sdk/log4net.Layout.PatternLayout.html

DODATKOWO, biorąc pod uwagę, że pisanie rozszerzeń do frameworka logowania jest prawdopodobnie klasycznym 'meta-problemem', log4net przynosi wielka lista odpowiedników pluggable listener w tabeli.

Lista appenderów: http://logging.apache.org/log4net/release/config-examples.html

 0
Author: Jim Burger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-30 13:24:42