Event Logs in C#
- Inleiding
- Event Viewer
- Event log Group creëren
- Event Log Group verwijderen
- Event Log vullen
- Resultaat
- Slot
- Voorbeeldprogramma
Inleiding
Windows gebruikt voor het loggen van haar events event logs. Microsoft is de kwaadste niet en staat toe dat ook jij event logs mag gebruiken. Meer over event logs in deze post.
Event Viewer
De event logs zijn te bekijken met de Event Viewer. De event viewer is een hulpprogramma van Windows en op te starten met de Run functie (te vinden onder de Windows start button) waarna je het commando eventvwr ingeeft:
Je krijgt vervolgens onderstaand scherm te zien en de event logs van Windows zelf zijn allemaal te vinden onder groep Windows Logs. De Windows Logs zijn weer verder onderverdeeld in Application logs, Security logs, Setup logs en System logs:
Event Log Group creëren
Je mag je eigen event logs hebben onder de Applications and Services Logs. Een Event Log Group bevat de event logs van je programma en we creëren als volgt een eigen event log groep:
static void MaakEventLogGroep()
{
if (!EventLog.SourceExists
(source: "Testprogramma"))
{
EventLog.CreateEventSource(
source: "Testprogramma",
logName: "Test");
Console.WriteLine(
"Event Log groep Test is aangemaakt.");
}
}
Reboot de computer na het aanmaken van de event log groep. Blijkbaar weet Windows pas na een reboot dat er een nieuwe event log groep is (bug van Windows?) We zien uiteindelijk onder de Applications en Services Logs een event log groep met de naam Test:
Event Log Group verwijderen
Foutje gemaakt of heb je een event log groep niet meer nodig? Zie onderstaande code om een event log groep te verwijderen. Reboot na het verwijderen voor de zekerheid de computer zodat ook Windows weet dat de event log groep er niet meer is.
static void VerwijderEventLogGroep()
{
if (EventLog.SourceExists(
source: "Testprogramma"))
{
EventLog.Delete(logName: "Test");
Console.WriteLine(
"Event Log groep Test is verwijderd.");
}
}
Event Log vullen
We schrijven een functie waarin we een deling doen:
static int Berekening(int teller, int noemer)
{
try
{
int uitkomst = teller / noemer;
return uitkomst;
}
catch
{
throw;
}
}
We roepen de functie als volgt aan waarbij de noemer de waarde 0 krijgt:
try
{
int teller = 10,
noemer = 0; // de bug...
Console.WriteLine(
"Begin programma.");
Console.WriteLine(
"Als we {0} delen door {1}...",
teller, noemer);
Console.WriteLine(
"Dan is de uitkomst {0}.",
Berekening(teller, noemer));
}
Delen door nul is is flauwekul en we krijgen (zoals verwacht) een exception. De exception wordt opgevangen door de exception handler en we zetten de foutboodschap en de stack trace in een event log. Het gaat in dit geval om een fout (exception) en de event level krijgt daarom een EventLogEntryType.Error waarde. We gebruiken verder een StringBuilder voor datgene wat we willen loggen.
catch (Exception ex)
{
Console.WriteLine(
"Dan gaat het fout.");
// We gebruiken een StringBuilder
StringBuilder stringBuilder =
new StringBuilder();
// de foutmelding
stringBuilder.Append(
"Foutmelding:" +
Environment.NewLine);
// wat carriage returns
stringBuilder.Append(
ex.Message + Environment.NewLine +
Environment.NewLine);
// de stacktrace
stringBuilder.Append(
"StackTrace:" + Environment.NewLine);
stringBuilder.Append(ex.StackTrace);
// En wegschrijven naar de Event Log
if (EventLog.SourceExists(
source: "Testprogramma"))
{
EventLog eventLog =
new EventLog(logName: "Test");
eventLog.Source = "Testprogramma";
eventLog.WriteEntry(
message: stringBuilder.ToString(),
type: EventLogEntryType.Error);
}
}
Resultaat
En we vinden een event log terug. Er is iets gebeurd, ’s avonds laat…
Slot
In deze post heb ik laten zien hoe we op zijn Windows’ kunnen loggen met event logs waarbij we onze eigen event logs kunnen terugvinden onder de Applications and Services Logs. Event logs kunnen erg informatief wezen. Zo kunnen we bijvoorbeeld aan de hand van de event logs met een Error event level zien hoe vaak problemen optreden en per wanneer.
Hopelijk ben je met deze posting weer wat wijzer geworden en ik hoop je weer terug te zien in één van mijn volgende blog posts. Wil je weten wat ik nog meer over C# heb geschreven? Hit the C# button…
Voorbeeldprogramma
using System;
using System.Text;
using System.Diagnostics;
namespace EventLogNameSpace
{
class Program
{
static void Main(string[] args)
{
try
{
int teller = 10, noemer = 0;
Console.WriteLine(
"Begin programma.");
Console.WriteLine(
"Als we {0} delen door {1}...",
teller, noemer);
Console.WriteLine(
"Dan is de uitkomst {0}.",
Berekening(teller, noemer));
}
catch (Exception ex)
{
Console.WriteLine(
"Dan gaat het fout.");
// Wat je wilt loggen
StringBuilder stringBuilder =
new StringBuilder();
stringBuilder.Append(
"Foutmelding:" + Environment.NewLine);
stringBuilder.Append(
ex.Message +
Environment.NewLine + Environment.NewLine);
stringBuilder.Append(
"StackTrace:" + Environment.NewLine);
stringBuilder.Append(ex.StackTrace);
// En wegschrijven naar de Event Log
if (EventLog.SourceExists(
source: "Testprogramma"))
{
EventLog eventLog =
new EventLog(logName: "Test");
eventLog.Source = "Testprogramma";
eventLog.WriteEntry(
message: stringBuilder.ToString(),
type: EventLogEntryType.Error);
}
}
finally
{
Console.WriteLine(
"Einde programma.");
Console.ReadKey();
}
}
static int Berekening(int teller, int noemer)
{
try
{
int uitkomst = teller / noemer;
return uitkomst;
}
catch
{
throw;
}
}
static void MaakEventLogGroep()
{
if (!EventLog.SourceExists(
source: "Testprogramma"))
{
EventLog.CreateEventSource(
source: "Testprogramma",
logName: "Test");
Console.WriteLine(
"Event Log groep Test is aangemaakt.");
}
}
static void VerwijderEventLogGroep()
{
if (EventLog.SourceExists(
source: "Testprogramma"))
{
EventLog.Delete(
logName: "Test");
Console.WriteLine(
"Event Log groep Test is verwijderd.");
}
}
}
}