2011-10-31 12 views
8

Gdy używam poniższy kod, żeby napisać do dziennika zdarzeń aplikacji, wszystko działa prawidłowo:Zapisywanie do dziennika zdarzeń w języku C# - czy muszę używać EventLog.CreateEventSource podczas zapisywania w dzienniku aplikacji?

EventLog log = new EventLog(); 
log.Source = "Application"; 
log.WriteEntry("test message", EventLogEntryType.Error); 

Kiedy korzystać z kodu, który jest z MSDN i wszystkich innych blogów, pojawia się błąd zabezpieczeń (zgaduję, bo CreateEventSource to podnosi).

string sSource = "MyWebService"; 
string sLog = "myApplication"; 
string sMsg = errorMessage; 

if (!EventLog.SourceExists(sSource)) 
    EventLog.CreateEventSource(sSource, sLog); 

EventLog.WriteEntry(sSource, sMsg, EventLogEntryType.Error); 

Czy muszę sprawdzić, czy źródło istnieje, jeśli wszystko, czego potrzebuję, to zapisanie do dziennika aplikacji domyślnie?

Jaki jest właściwy sposób zapisu do EventViewer?

Odpowiedz

7

Metoda CreateEventSource tworzy nowe źródło w dzienniku zdarzeń, co pozwala na zapisywanie dziennika aplikacji w grupie własnej aplikacji zamiast pisania w ogólnej grupie Application.

Być może wystąpił błąd, ponieważ użytkownik, którego używasz do utworzenia źródła zdarzeń, nie ma uprawnień do jego utworzenia, spróbuj uruchomić program jako administrator, jeśli jesteś pod Vista/7 OS.

Właściwy sposób logowania do przeglądarki zdarzeń zależy od Twoich potrzeb, jeśli twoja aplikacja generuje dużo logów i chcesz pogrupować ten log w pojemniku specyficznym dla aplikacji, może lepiej będzie utworzyć dziennik specyficzny dla aplikacji źródło zdarzenia i zapisz go w dzienniku, zamiast tego, jeśli aplikacja generuje kilka komunikatów dziennika i nie ma potrzeby ich grupowania, można użyć ogólnego źródła zdarzeń Application ...

+1

świetnie, dziękuję! Właśnie potrzebowałem potwierdzić. Nie muszę tworzyć osobnego źródła/dziennika. Właściwie chcę napisać do dziennika aplikacji. – sarsnake

+2

jeszcze jedno pytanie: kiedy piszę do ogólnego źródła aplikacji, pojawia się następujący komunikat podczas przeglądania go w przeglądarce zdarzeń: "Opis zdarzenia (0) to Źródło (aplikacja) nie może zostać znaleziony. posiadać niezbędne informacje rejestru lub pliki DLL wiadomości, aby wyświetlać wiadomości ze zdalnego komputera ".... wtedy wyświetlany jest mój niestandardowy komunikat. Zastanawiałem się, czy nie można wyświetlić tego długiego domyślnego komunikatu bez ustawiania źródła. – sarsnake

+0

To dlatego, że twój komputer monitorujący nie ma odniesień do komunikatów błędów, wyeksportuj dziennik zdarzeń komputera zdalnego do pliku CSV na podstawie tekstów, a otrzymasz wszystkie informacje ze zdalnego komputera (włączając błędy wszystkich aplikacji zainstalowanych przez inne osoby). – user3800527

2

Proponuję spróbować log4net, w przypadku, gdy chcesz napisać do różnych źródeł, jak również (SMTP, plik, itp)

http://logging.apache.org/log4net/release/config-examples.html#eventlogappender

dla aplikacji internetowych:

Zastosowanie ogólne:

Podobne rozwiązanie do obsługi WinForms/Windows.

+2

Dzięki, ale to nie odpowiada na zadane pytanie. – sarsnake

-1

Nie trzeba tworzyć źródło zdarzenia. Może to być dużą zaletą podczas generowania zdarzeń, które są niezależne od języka lub mają substytucje, ale są opcjonalne, przynajmniej dla programów .NET (BCL zapewnia domyślne źródło zdarzeń).

+0

pojawia się błąd "Właściwość źródłowa nie została ustawiona przed zapisaniem do dziennika zdarzeń", gdy dziennik jest pusty, więc nie, nie jest opcjonalny. –

2

Aby utworzyć źródło zdarzenia, musisz mieć uprawnienia administratora. W pierwszym nie używasz niestandardowego źródła.

1

Prosta metoda WriteEntry zostanie przeniesiona do domyślnego źródła aplikacji. SourceExists i CreateEventSource to, jeśli chcesz utworzyć własne niestandardowe źródło, które będzie łatwiej zlokalizować wszystkie wpisy dziennika w Podglądzie zdarzeń.

I tak, musisz mieć prawa do tworzenia źródła zdarzeń klienta, o czym wspominali inni.

0

Potrzebujesz uprawnień administratora do uruchomienia aplikacji.

Albo można uruchomić aplikację przez wchodząc do folderu debugowania aplikacji i prawym przyciskiem myszy na pliku .exe i uruchom jako admin

lub

uruchomić Visual Studio jako admin

Powiązane problemy