2011-01-12 26 views
27

Mam zamiar przejść na nowe, zunifikowane rozwiązanie do rejestrowania w celu wykorzystania w naszej nowej linii produktów i chciałem zobaczyć, co myślą niektórzy ludzie w Stack Overflow. Będziemy potrzebować rejestrowania w różnych aplikacjach: ASP .net, usługi Windows, usługi internetowe, aplikacje typu wpf itp. Jesteśmy tylko sklepem z oknami.C# Rejestrowanie. Co powinienem użyć?

Niektóre z naszych wymagań dla roztworu rejestrowania należą:

1) Zaloguj się do zarządzania plikami

- Ability to split files up over a certain size 
- Ability to auto archive/delete after certain period of time 

2) zdolność do wysyłania e-maili na niektóre rodzaje komunikatów wypisywanych (błędy na przykład)

3) umiejętność pisania wiadomości do zdarzeń systemu Windows

- We need to be able to specify where it's being written in the event log. 
    It would also be nice if it would automatically create the event log source if it does exist. 

Zacząłem przeglądać nLog, Windows Trace i Log4net. Nie ograniczam się tylko do tych 3, ale to tylko kilka, które wyszły dużo podczas wyszukiwania.

+1

log4net jest zdecydowanie najczęściej używanym i spełnia wszystkie te wymagania. To ten, którego bym użył, ale YMMV. – Thorarin

+5

Spróbuj tego: http://stackoverflow.com/search?q=[.net]+logging Znajdziesz wiele ciekawych odpowiedzi. –

+0

Duplikat, ale Cole W przedstawia pewne specyficzne wymagania, o których myślał, co jest miłe w tym pytaniu. – Marijn

Odpowiedz

17

log4net jest zawsze dobrym wyborem.

http://logging.apache.org/log4net/

+3

Nie, to nie jest dobry wybór, jeśli chcesz coś łatwego do wdrożenia. Oczywiście, jeśli już jesteś użytkownikiem log4net, może to być dla ciebie łatwe. Dla każdego, kto nigdy go nie używał, ustawienie go to ból w dupie. – Pedro

+1

Mniej bólu w tyłku niż pisanie własnej struktury logowania się! – RichardOD

+1

@Pedro czym się zajmuje * wdrażanie *? Możesz znaleźć app.config przykłady, jak skonfigurować program rejestrujący. –

3

Można przyjrzeć Enterprise Library, mają blok aplikacji do logowania, który jest rozciągliwy

http://entlib.codeplex.com/

http://entlib.codeplex.com/releases/view/46741

można pobrać przewodnik dev pdf, mają sekcję dotyczącą logowanie (rozdział 4)

+0

+1 Otrzymywałem link :) –

+1

mieliśmy * bardzo * złe doświadczenia z tym - na serwerach internetowych, logował się i blokował plik (to znaczy, nie wypuszczał go na czas dla innego dziennika), więc następny dziennik trafił do innego pliku, który miał GUID jako nazwę ... bardzo niepraktyczną dla jakiegokolwiek środowiska produkcyjnego ... – veljkoz

+1

To brzmi jak próbujesz zalogować się do tego samego pliku z wielu procesów (lub używając wielu 'TraceListeners' tego punktu do tego samego pliku). Zobacz: http://stackoverflow.com/questions/1728571/logging-from-multiple-processes-to-same-file-using-enterprise-library-4-1. Używam Biblioteki korporacyjnej w środowiskach produkcyjnych dla przedsiębiorstw, odkąd został wydany i miałem bardzo dobre doświadczenia. –

9

I tylko jeszcze jeden: NLog.

  • Files - pojedynczy plik lub wielokrotność, z automatycznego nazywania plików i archiwizacji
  • Event Log - lokalnie lub zdalnie Database - przechowywania dzienników w bazach danych obsługiwane
  • przez NET Network - za pomocą protokołu TCP , UDP, SOAP protokoły MSMQ
  • konsola wiersza poleceń - w tym kodowania kolorów wiadomości
  • e-mail - możesz odbierać wiadomości e-mail, gdy wystąpić
  • śledzenia ASP.NET
  • błędy aplikacji i wiele więcej
+0

Użyłem NLog w moim poprzednim projekcie i stwierdziłem, że jest on łatwiejszy do skonfigurowania niż Log4Net (który nie działałby, w niewytłumaczalny sposób). – Shimrod

11

Zastosowanie .NET common logging. Możesz wybrać później określonego dostawcę (NLog, CLog, log4net ...), a nawet utworzyć niestandardowe.

+4

Ale co, jeśli chcę uniknąć zależności od wspólnego rejestrowania .NET? Szczerze mówiąc, wydaje mi się to niepotrzebną warstwą abstrakcji. log4net i inni sami są abstrakcjami w stosunku do rejestrowania - jaki mógłbym mieć powód do zamiany jednego na inny, co nie jest również argumentem przeciwko używaniu wspólnego rejestrowania .NET? –

+7

Jest to podobne do logowania Apache commons dla Javy i ten sam argument dotyczy jego istnienia. Załóżmy, że piszesz biblioteki, które będą używane w innym kodzie. Nie chcesz dyktować, która struktura logowania jest używana w jakimkolwiek kodzie, który współdziała z twoją biblioteką, ponieważ to oznacza, że ​​klient musi mieć konfigurację dla twojej konkretnej struktury. Powiedzmy, że jeśli zdecydujesz się użyć log4net, inna biblioteka używa NLog, wtedy klient musi mieć obie te konfiguracje, aby używać obu bibliotek. Commons pozwala na dziedziczenie struktury logowania z kodu klienta. – Ceilingfish

0

Możesz utworzyć własną bibliotekę do rejestrowania ... Tak zrobiłem.

Spójrz na PostSharp http://www.sharpcrafters.com/ mają bardzo dobre przykłady niektórych podstawowych systemów logowania.

1

Zobacz to pytanie dla innej wyczerpującą odpowiedź: When should I use Tracing vs Logger.NET, Enterprise Library, log4net or Ukadc.Diagnostics?

W skrócie, główne ramy rejestrowania dostępne są wbudowane w .NET Framework System.Diagnostics, log4net, NLog i Enterprise Library Logging Block aplikacji.

Porównanie tych głównych ram jest dostępna pod adresem: https://essentialdiagnostics.codeplex.com/wikipage?title=Comparison

1) Log zarządzania plikami

Wszystkie główne ramy wymienione powyżej wsparcie toczenia pliki, ale myślę, że opuszczenie porządki do ciebie .

np. w przeszłości używałem zaplanowanego zadania Windows, które używa robocopy z "/ mov/minage X", aby przenieść stare pliki gdzie indziej, a następnie usunąć lub cokolwiek innego.

EventSchemaTraceListener używany w System.Diagnostics, który I blogged about recently, ma opcję LimitedCircularFiles, ale niewiele obsługuje narzędzi do przeglądania logów (są one w XML).

2) Możliwość wysyłania maili na niektóre rodzaje komunikatów błędów zalogowany (na przykład)

Wszystkie główne ram wymienione powyżej wsparcia tego bezpośrednio lub za pośrednictwem rozszerzeń (dodatkowe słuchaczy).

3) umiejętność pisania wiadomości do zdarzeń systemu Windows

znowu wszystkich głównych ram wsparcia to jednak ja generalnie polecam, że pisanie w dzienniku zdarzeń systemu Windows powinno być wykonane bezpośrednio i nie przez śledzenie.

Jednym z problemów jest pytanie o automatyczne tworzenie źródeł.

Każde pismo w dzienniku zdarzeń (który przechodzi przez EventLog.WriteEvent) będzie automatycznie próba stworzenia źródła na pierwszej wiadomości dziennika, jeśli nie istnieje - problem jest z bezpieczeństwem, tylko administratorzy mogą do tworzenia źródeł, więc działa jako zwykły użytkownik, to się nie udaje.

Z tego powodu naprawdę trzeba dodać EventLogInstaller, aby źródło zostało utworzone w czasie instalacji (instalacja jest wykonywana przez administratora). Po utworzeniu każdy proces może następnie napisać do źródła.

To prowadzi do mojej rekomendacji, że należy utworzyć i zapisać w dzienniku zdarzeń kod, aby upewnić się, że źródło dziennika zdarzeń jest takie samo. Ponadto, jeśli zapisujesz w dzienniku zdarzeń ogólnie, nie chcesz, aby był on "wyłączony" poprzez błędną konfigurację.

Moja osobista rekomendacja to gotowe rozwiązanie .NET Framework System.Diagnostics, w szczególności przeglądarka usług śledzenia, doskonale nadaje się do diagnozowania problemów, w szczególności w wielowarstwowych środowiskach wielowątkowych, jeśli używa się WCF, gdzie może przejść korelacja identyfikuje poszczególne poziomy.

Powiązane problemy