2010-01-04 20 views
5

Mam kilka istniejących aplikacji klienckich i serwerowych, które obecnie przepychają się. Raz na jakiś czas, klient będzie chciał dodać w pewnym typie interfejsu internetowego, aby uzyskać dostęp do części swoich danych. Są to zwykle niestandardowe, choć niektóre są "ogólne"; ale każdy ma własną "instancję" we własnej maszynie wirtualnej.Baza danych dzienników błędów - dla wielu aplikacji

Potrzebuję scentralizowanego obszaru do przechwytywania i rejestrowania błędów pojawiających się na każdej z tych maszyn wirtualnych.

Pragnę utworzyć nową bazę danych i skonfigurować usługę WCF, aby umożliwić każdemu z tych aplikacji tworzenie dziennika w mojej scentralizowanej bazie danych, a także w lokalnym dzienniku zdarzeń.

Czy to zły projekt?

aktualizacja

W webapps są na 2003/2008/IIS6 i IIS7, zbudowany w ASP.NET. Wiele instancji znajduje się na parze serwerów WWW, ale wiele z nich zostanie wdrożonych na poszczególnych maszynach wirtualnych.

+0

Czy możesz podać więcej szczegółów na temat platformy, z której korzystasz? Brzmi jak system Windows + IIS ...? – Wim

Odpowiedz

4

Dokładnie to wdrożyliśmy.

Mamy 3 tabel w bazie danych:

Event Types 
------------ 
EventType int 
EventDescription varchar(50) 


MonitoredSystems 
--------------- 
SystemID int 
SystemName varchar(50) 
SystemDescription text 


Events 
------- 
RecordID bigint 
EventTime datetime 
SystemID int FK 
EventText text 
EventType int FK 
Acknowledged bit 

również przeniesiono na teren, na którym możemy zobaczyć wydarzenia. Pole "Potwierdzone" pozwala nam ustawić nazwy wyświetleń "Nieznane problemy krytyczne", abyśmy mogli szybko zobaczyć wszelkie nowe problemy i potwierdzić je podczas ich czytania.

Wiemy, że istnieją inne narzędzia, które mogą to dla nas zrobić, ale żadna nie była tak łatwa do zintegrowania jak nasza własna wersja domowa, a teraz używamy jej w każdej aplikacji, którą tworzymy. Mamy kilka innych dostosowań, o których nie wspominam, że inne narzędzia nie dostarczały po wyjęciu z pudełka.

Więc myślę, że twój pomysł jest w porządku. Jeśli tworzysz go samodzielnie, możesz dostosować go tak, aby działał tak, jak chcesz. Jednak polecam przynajmniej zaglądanie do narzędzi takich jak Log4net, itp.

+0

Wiem, że to bardzo stary wątek, ale chciałbym dowiedzieć się więcej o waszej implementacji i jej ulepszeniu w ciągu ostatnich kilku lat.Na przykład, czy wstawiasz fragment do swoich aplikacji, dziedziczysz po klasie, czy też musisz napisać do niego wezwanie w wielu blokach próbnych czegoś takiego? Dzięki. :) – Chiramisu

+0

Krótka wersja polega na tym, że mamy wywołania dzienników WriteToError w kodzie w każdej aplikacji. Kod jest zwięzły - jest to połączenie z serwisem internetowym. Zawsze umieszczamy globalną procedurę obsługi błędów w global.asax (webapps), a dla WinForms obsługujemy zdarzenia System.Windows.Forms.Application.ThreadException i AppDomain.CurrentDomain.UnhandledException. Zazwyczaj konfigurujemy funkcję rejestrowania błędów w klasie statycznej na aplikację, aby inne klasy mogły po prostu wywoływać komunikaty "OverseerLogger.LogError (ErrorMessage, System.Environment.MachineName, SeverityLevel). – David

3

Należy przyjrzeć ELMAH (moduły rejestrowania błędów i ładowarki) (http://code.google.com/p/elmah/) z kombinacji Orbit One Reporter Exception (http://aspexceptionreporter.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=35343), które w połączeniu mogą dać ci korporacyjnej szeroki zakres raportowania błędów w centralnej lokalizacji.

+0

+1 na Reporterze wyjątków Orbit One. Nie widziałem tego wcześniej i wygląda bardzo elegancko. –

+0

+1. Ten wyjątkowy reporter Orbit One wygląda podobnie do tego, co wymyśliliśmy jako domowa aplikacja. Lubię to. – David

0

Jeśli często logujesz (debug/info/warning), upewnij się, że wywołania RPC są wykonywane asynchronicznie.

Polecam bardziej elastyczną strukturę danych;

Events 
------- 
RecordID bigint 
EventTime datetime 
EventLevel text 
SystemID text 
EventText text 
EventType text 
Acknowledged bit 

EventProperties 
------- 
RecordID bigint 
key text 
value text 

W EventProperties umożliwia aplikację do logowania rejestrowania wszelkich informacji, które mogą być przydatne, bez konieczności definiowania takich właściwości wyprzedzeniem. Zauważ, że nie ma ograniczeń dla SystemID, co pozwala na dodawanie systemów bez konfiguracji.

Powiązane problemy