Event Logs in C#

  1. Inleiding
  2. Event Viewer
  3. Event log Group creëren
  4. Event Log Group verwijderen
  5. Event Log vullen
  6. Resultaat
  7. Slot
  8. 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.

up | down

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:

Click to enlarge…

up | down

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:

Click to enlarge…

up | down

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.");
   }
}

up | down

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);
   }
}

up | down

Resultaat

En we vinden een event log terug. Er is iets gebeurd, ’s avonds laat…

Click to enlarge…

up | down

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…

up | down


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.");
       }
    }
 }
}

up

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *