Postupy: Zaznamenávání informací o službách
Poznámka:
Tento článek se nevztahuje na hostované služby v .NET. Nejnovější obsah ve službách Windows používajících Microsoft.Extensions.Hosting.BackgroundService a šablonu Pracovní služba najdete v tématech:
Ve výchozím nastavení mají všechny projekty služby Systému Windows možnost pracovat s protokolem událostí aplikace a zapisovat informace a výjimky. Tuto vlastnost použijete AutoLog k označení, zda chcete tuto funkci ve své aplikaci použít. Ve výchozím nastavení je protokolování zapnuté pro libovolnou službu, kterou vytvoříte pomocí šablony projektu služby systému Windows. Statickou formu třídy můžete použít k zápisu EventLog informací o službě do protokolu, aniž byste museli vytvořit instanci EventLog komponenty nebo ručně zaregistrovat zdroj.
Instalační program pro vaši službu automaticky zaregistruje každou službu v projektu jako platný zdroj událostí s protokolem aplikace v počítači, na kterém je služba nainstalovaná, když je protokolování zapnuté. Služba protokoluje informace při každém spuštění, zastavení, pozastavení, obnovení, instalaci nebo odinstalaci služby. Protokoluje také všechna selhání, ke kterým dochází. Při použití výchozího chování nemusíte psát žádný kód pro zápis položek do protokolu; služba to za vás zpracuje automaticky.
Pokud chcete zapisovat do jiného protokolu událostí než do protokolu aplikace, musíte vlastnost nastavit AutoLog na false
, vytvořit vlastní protokol událostí v kódu služeb a zaregistrovat službu jako platný zdroj položek pro tento protokol. Potom musíte napsat kód pro záznam položek do protokolu, kdykoli dojde k akci, která vás zajímá.
Poznámka:
Pokud používáte vlastní protokol událostí a nakonfigurujete aplikaci služby tak, aby do ní zapisovat, nesmíte se před nastavením vlastnosti služby ServiceName v kódu pokoušet o přístup k protokolu událostí. Protokol událostí potřebuje hodnotu této vlastnosti k registraci vaší služby jako platného zdroje událostí.
Povolení výchozího protokolování událostí pro vaši službu
AutoLog Nastavte vlastnost komponenty na
true
hodnotu .Poznámka:
Ve výchozím nastavení je tato vlastnost nastavena na
true
hodnotu . Toto nastavení nemusíte explicitně nastavit, pokud nevytváření složitějšího zpracování, například vyhodnocení podmínky a následné nastavení AutoLog vlastnosti na základě výsledku této podmínky.
Zakázání protokolování událostí pro vaši službu
AutoLog Nastavte vlastnost komponenty na
false
hodnotu .AutoLog = false;
Me.AutoLog = False
Nastavení protokolování do vlastního protokolu
Nastavte vlastnost AutoLog na
false
.Poznámka:
Pokud chcete použít vlastní protokol, musíte nastavit AutoLog hodnotu false.
Nastavte instanci EventLog komponenty v aplikaci služby systému Windows.
Vytvořte vlastní protokol voláním CreateEventSource metody a zadáním zdrojového řetězce a názvu souboru protokolu, který chcete vytvořit.
Source Nastavte vlastnost EventLog instance komponenty na zdrojový řetězec, který jste vytvořili v kroku 3.
Zápis položek přístupem k WriteEntry metodě v EventLog instanci komponenty.
Následující kód ukazuje, jak nastavit protokolování do vlastního protokolu.
Poznámka:
V tomto příkladu kódu je instance EventLog komponenty pojmenována
eventLog1
(EventLog1
v jazyce Visual Basic). Pokud jste vytvořili instanci s jiným názvem v kroku 2, odpovídajícím způsobem změňte kód.public UserService2() { _eventLog1 = new EventLog(); // Turn off autologging AutoLog = false; // create an event source, specifying the name of a log that // does not currently exist to create a new, custom log if (!EventLog.SourceExists("MySource")) { EventLog.CreateEventSource( "MySource", "MyLog"); } // configure the event log instance to use this source name _eventLog1.Source = "MySource"; _eventLog1.Log = "MyLog"; }
Public Sub New() ' Turn off autologging Me.AutoLog = False ' Create a new event source and specify a log name that ' does not exist to create a custom log If Not System.Diagnostics.EventLog.SourceExists("MySource") Then System.Diagnostics.EventLog.CreateEventSource("MySource", "MyLog") End If ' Configure the event log instance to use this source name EventLog1.Source = "MySource" End Sub
protected override void OnStart(string[] args) { // write an entry to the log _eventLog1.WriteEntry("In OnStart."); }
Protected Overrides Sub OnStart(ByVal args() As String) ' Write an entry to the log you've created. EventLog1.WriteEntry("In Onstart.") End Sub