schließen
Zum Inhalt springen
busitec Logo
  • Leistungen
          • DIGITALISIERUNG
          • Prozessautomatisierung
          • Anwendungsentwicklung
          • Data Driven Company
          • Modern Workplace
          • KI für Unternehmen
          • Security
          • BUSINESS LÖSUNGEN
          • Sales und Marketing – CRM
          • Kundenservice und Field Service
          • HR und Employee Experience
          • Lieferanten- und Vertragsmanagement
          • Belegmanagement
          • Energie- und Versorgungsunternehmen
          • SERVICES
          • Digitale Strategie entwickeln
          • Digitale Reifegradmessung
          • Digitale Werkbank
          • IT-Workshops
          • Power Platform CoE
          • Managed Microsoft 365
          • Backup as a Service
          • B.SOLUTIONS
          • powerelements – Die Versorger-Suite
          • Besuchermanagement
          • Meeting Manager
          • Microsoft Teams Telefonie Connector
  • Technologien
        • BUSINESS APPS

          • Microsoft Power Platform – Individual
          • Microsoft Dynamics 365 – CRM
          • Microsoft Fabric – Data Driven
          • ELO ECM Suite – DMS/ECM
        • TOOLS

          • dox42 – Dokumentengenerator
          • skybow – Solution Builder
        • PRODUCTIVITY

          • Microsoft 365
          • Microsoft 365 Copilot
          • Microsoft Azure
        • INTEGRATION

          • ELO Connector für Microsoft
          • Skribble Sign Connector für Microsoft
  • Referenzen
  • Über busitec
    • Unternehmensprofil
    • Partner
    • Team
    • Karriere bei busitec
    • Standorte
  • Aktuelles
    • Blog und News
    • Newsletter
    • Podcast
    • Events und Workshops
    • Mediathek
  • Kundenportal

Suche öffnen

Termin vereinbaren
Termin vereinbaren
busitec Logo

Suche öffnen

  • Leistungen
    • Digitalisierung
      • Prozessautomatisierung
      • Anwendungsentwicklung
      • Data Driven Company
      • Modern Workplace
      • KI für Unternehmen
      • Security
    • Business Lösungen
      • Sales und Marketing – CRM
      • Kundenservice und Field Service
      • HR und Employee Experience
      • Lieferanten- und Vertragsmanagement
      • Belegmanagement
      • Energie- und Versorgungsunternehmen
    • Services
      • Digitale Strategie entwickeln
      • Digitale Reifegradmessung
      • Digitale Werkbank
      • IT-Workshops
      • Power Platform (CoE)
      • Managed Microsoft 365
      • Backup as a Service
    • b.solutions – Eigenlösungen
      • powerelements – Die Versorger-Suite
      • Besuchermanagement
      • Meeting Manager
      • Microsoft Teams Telefonie Connector
  • Technologien
    • Business Apps
      • Microsoft Power Platform – Individual
      • Microsoft Dynamics 365 – CRM
      • Microsoft Fabric – Data Driven
      • ELO ECM Suite – DMS/ECM
    • Tools
      • dox42 – Dokumentengenerator
      • skybow – Solution Builder
    • Productivity
      • Microsoft 365
      • Microsoft 365 Copilot
      • Microsoft Azure
    • Integration
      • ELO Connector für Microsoft
      • Skribble Sign Connector für Microsoft
  • Referenzen
  • Über busitec
    • Unternehmensprofil
    • Partner
    • Team
    • Karriere bei busitec
    • Standorte
  • Aktuelles
    • Blog und News
    • Newsletter
    • Podcast
    • Events und Workshops
    • Mediathek
  • Kundenportal
  • Suchen
  • Termin vereinbaren

Strukturiertes Logging mit Serilog

Serilog Banner

Blog Home / Deep Dive / Strukturiertes Logging mit Serilog

Im ersten Teil haben wir schon gesehen, wie man mit Serilog Logging in eine Anwendung bekommen kann.

Bisher haben wir lediglich einfache Meldungen in Log geschrieben. Das ist zwar schon nett, aber typischerweise will man in einem technischen Log auch ein paar Details zu der aktuell ausgeführten Operation sehen. Sprich: es sollten auch Variablen-Inhalte in das Log geschrieben werden.

Ein naiver Ansatz wäre nun folgender:

var foo = "meinWert";
Log.Logger.Debug("Wert von foo: " + foo);

Das erfüllt zwar auf den ersten Blick die Anforderung, aber das geht auch besser.

Holen wir einmal ein wenig aus …

Wenn man sich einmal das EventLog von Windows ansieht, dann sehen Logmeldungen typischer so aus

Event Properties

Man kann sich die gleiche Meldung aber auch mit Details ansehen.

Event Properties

Dort erkennt man, dass die Meldung detaillierter dargestellt wird. Neben der reinen textuellen Darstellung kann man den Wert jeder einzelnen Variable auch einzeln sehen. Das ist interessant, würde es doch möglich sein, dass man sich alle Meldungen anzeigen lässt, in der das Feld updateGuid den Wert {D7F12BD4-EE54-4993-909A-D1893145D8FB} hat.

Nun wieder zurück zu Serilog. Diese Art von Logging nennt man „structured logging“. Das kann man mit Serilog ebenfalls erreichen. In unserem Beispiel von oben müssten wir dazu unser Logging ein wenig anpassen:

var foo = "meinWert"; 
Log.Logger.Debug("Wert von foo: {foo} ", foo); 

Beim Logging in eine Textdatei oder auf die Konsole ändert sich ersteinmal nichts. Diese Sinks können nur die reine Text-Darstellung logging. Die Meldung im Log sieht als so aus

[DBG] Wert von foo: "meinWert"

Interessant ist vielleicht noch, wie die Logmeldung aussieht wenn foo ein leerer String ist

[DBG] Wert von foo: ""

Serilog hat hier also um den Wert von foo Anführungszeichen gesetzt. Das macht es (in meinen Augen) leichter zu erkennen ob eine Zeichenfolge einfach nur leer ist oder zB aus Leerzeichen besteht.

Anmerkung: mit einem der letzten Updates des File-Sinks hat sich das Default-Verhalten geändert, so dass dieses Sink keine Anführungszeichen um die Werte setzt. Um dieses Verhalten wieder zu erhalten muss man das Template für das Logging anpassen.

.WriteTo.File("MyApplication.log", outputTemplate:"[{Level:u3}] {Message:j}{NewLine}{Exception}")

Entscheidend ist hierbei {Message:j}. Default wäre {Message:lj}, wobei das :l anzeigt, dass keine Anführungszeichen eingefügt werden sollen. (Mehr zun den Output-Templates findet man im Wiki)

Mit einem geeigneten Sink kann man nun (wie Application-Insights) auch den Wert von foo getrennt erkennen.

Azure

Und man kann nun auch alle Logmeldungen suchen, in denen foo den Wert “Mein Wert” hat.

Serilog Sample

Das eröffnet ungeahnte Möglichkeiten …

Aber vielleicht noch mal zurück zu dem Logging von Werten. In dem Beispiel haben wir ja einfach nur einen String gelogged. Aber häufig hat man vielleicht auch komplexere Objekte (zB DTOs) deren Zustand man Loggen will. Der naheliegenste Weg ist hier wiederum

var newUser = new User(){FirstName = "Henning", LastName = "Eiben"};
Log.Logger.Debug("Neuer Benutzer erstellte: Vorname: {Firstname}, Nachname: {Lastname}", newUser.FirstName, newUser.LastName);

Aber bei vielen Eigenschaften ist das irgendwie lästig. Einfacher ist da diese Schreibweise:

Log.Logger.Debug("Neuer Benutzer erstellte: {@newUser}", newUser);

Das dazugehörige Logfile sieht dann wie folgt aus:

[DBG] Neuer Benutzer erstellte: {"FirstName":"Henning","LastName":"Eiben","$type":"User"}

Das ist deutlich kürzer und zudem – wenn neue Eigenschaften zu dem User-Objekt dazukommen, werden die automatisch auch mit gelogged werden!

Etwas besonders ist die Behandlung von Arrays, Listen und Dictionaries. So erzeugt dieser Code

var plattforms = new[] { "SharePoint", "Office365", "Azure" };
Log.Information("Meine Plattformen: {plattforms}", plattforms);

folgenden Logeintrag

[INF] Meine Plattformen: ["SharePoint","Office365","Azure"]

Das soll für den zweiten Teil zu Serilog erst einmal genügen, mehr zum strukturieren Logging findet man im Wiki.

EibenH

Zurück

Fachliches und technisches Logging mit Serilog

Weiter

Teil 9: Gotcha, SharePoint! SharePoint Grenzwerte für Nebenversionen

busitec logo weiss
Digitale Technologien & Trends

Zum busitec-Blog
Immer up to date sein

Newsletter abonnieren
KONTAKT

+49 251 13 33 5 - 0
sales@busitec.de
Microsoft solution partner
  • Home
  • AGB
  • Sitemap
  • Impressum
  • Datenschutz
  • Cookies verwalten

Copyright © 2025 busitec GmbH

b.Buddy ✕
busitec Logo
Zustimmung verwalten

Wir benötigen Ihre Einwilligung, bevor Sie unsere Website weiter besuchen können.

Standardmäßig sind die Datenschutzeinstellungen für unsere Website so gewählt, dass nur essenzielle Cookies eingesetzt werden. Mit dem Klick auf den Button „Ablehnen“ werden lediglich diese Cookies eingesetzt. Um jedoch bestimmte Cookies und andere Technologien einsetzen zu dürfen, benötigen wir Ihre Einwilligung, die Sie freiwillig erteilen können. Klicken Sie auf „Akzeptieren“, erteilen Sie Ihre Einwilligung für alle auf der Website verwendeten Cookies und Technologien.

Ihre Auswahl können Sie jederzeit unter Cookie Richtlinien widerrufen oder anpassen.

Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
  • Optionen verwalten
  • Dienste verwalten
  • Verwalten von {vendor_count}-Lieferanten
  • Lese mehr über diese Zwecke
Einstellungen ansehen
  • {title}
  • {title}
  • {title}