<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://mediawiki.wissen-ahrensburg.de/index.php?action=history&amp;feed=atom&amp;title=Webframeworkk%2FASP.NET_Core%2FProtokollierung_und_Serilog</id>
	<title>Webframeworkk/ASP.NET Core/Protokollierung und Serilog - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.wissen-ahrensburg.de/index.php?action=history&amp;feed=atom&amp;title=Webframeworkk%2FASP.NET_Core%2FProtokollierung_und_Serilog"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.wissen-ahrensburg.de/index.php?title=Webframeworkk/ASP.NET_Core/Protokollierung_und_Serilog&amp;action=history"/>
	<updated>2026-08-19T16:51:46Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Dokument</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://mediawiki.wissen-ahrensburg.de/index.php?title=Webframeworkk/ASP.NET_Core/Protokollierung_und_Serilog&amp;diff=277&amp;oldid=prev</id>
		<title>imported&gt;Import: Version 202</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.wissen-ahrensburg.de/index.php?title=Webframeworkk/ASP.NET_Core/Protokollierung_und_Serilog&amp;diff=277&amp;oldid=prev"/>
		<updated>2026-02-27T14:09:34Z</updated>

		<summary type="html">&lt;p&gt;Version 202&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).&amp;#039;&amp;#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Logging ist ein unverzichtbares Werkzeug zur Überwachung, Fehlerbehebung und Gewinnung von Einblicken in das Verhalten deiner ASP.NET Core-Anwendung. Es dient als Fenster zu den Laufzeitereignissen deiner Anwendung und ermöglicht es dir, alles von Routineoperationen bis hin zu kritischen Fehlern zu verfolgen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
== 1. Das &amp;lt;code&amp;gt;ILogger&amp;lt;/code&amp;gt;-Interface ==&lt;br /&gt;
&lt;br /&gt;
Das Herzstück der Logging-Infrastruktur von ASP.NET Core ist das &amp;lt;code&amp;gt;ILogger&amp;lt;/code&amp;gt;-Interface. Es bietet eine standardisierte Möglichkeit, Log-Meldungen, Warnungen, Fehler und andere Diagnoseinformationen auszugeben.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Kernaspekte:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Abstraktion:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;ILogger&amp;lt;/code&amp;gt; ist ein Interface. Das bedeutet, du kannst verschiedene Logging-Provider (Konsole, Datei, Datenbank, Cloud) einbinden, ohne deinen Anwendungscode ändern zu müssen.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Anpassungsfähigkeit:&amp;#039;&amp;#039;&amp;#039; Du kannst Provider wechseln oder Konfigurationen nahtlos ändern, um sie an unterschiedliche Umgebungen anzupassen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Log-Level (Schweregrade):&amp;#039;&amp;#039;&amp;#039; Die Log-Level geben an, wie kritisch ein Ereignis ist:&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Trace:&amp;#039;&amp;#039;&amp;#039; Sehr detailliert, meist nur für die Fehlersuche in der Entwicklung.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Debug:&amp;#039;&amp;#039;&amp;#039; Informationen für das Debugging, weniger ausführlich als Trace.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Information:&amp;#039;&amp;#039;&amp;#039; Nachrichten über den normalen Geschäftsverlauf.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Warning:&amp;#039;&amp;#039;&amp;#039; Ereignisse, die auf Probleme hinweisen könnten, aber die Anwendung nicht stoppen.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Error:&amp;#039;&amp;#039;&amp;#039; Ausnahmen oder Fehler, die die Benutzererfahrung beeinträchtigen könnten.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Critical:&amp;#039;&amp;#039;&amp;#039; Kritische Systemfehler, die sofortiges Handeln erfordern.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Strukturiertes Logging:&amp;#039;&amp;#039;&amp;#039; Anstatt nur einfachen Text zu loggen (“User ‘John’ logged in”), nutzt ASP.NET Core &amp;#039;&amp;#039;&amp;#039;Key-Value-Paare&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Vorteil:&amp;#039;&amp;#039;&amp;#039; Erleichtert das Filtern und Analysieren in Tools wie Seq oder Elasticsearch erheblich.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;_logger.LogInformation(&amp;amp;quot;User {UserName} logged in&amp;amp;quot;, user.UserName);&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
== 2. Dependency Injection &amp;amp;amp; Controller ==&lt;br /&gt;
&lt;br /&gt;
In ASP.NET Core erhältst du eine &amp;lt;code&amp;gt;ILogger&amp;lt;/code&amp;gt;-Instanz normalerweise über Dependency Injection (DI).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;public class PersonsController : Controller&lt;br /&gt;
{&lt;br /&gt;
    private readonly ILogger&amp;lt;PersonsController&amp;gt; _logger;&lt;br /&gt;
&lt;br /&gt;
    public PersonsController(ILogger&amp;lt;PersonsController&amp;gt; logger)&lt;br /&gt;
    {&lt;br /&gt;
        _logger = logger;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public IActionResult Index()&lt;br /&gt;
    {&lt;br /&gt;
        _logger.LogInformation(&amp;quot;Die Index-Seite wurde aufgerufen.&amp;quot;);&lt;br /&gt;
        return View();&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;Der generische Typ &amp;lt;code&amp;gt;ILogger&amp;amp;lt;T&amp;amp;gt;&amp;lt;/code&amp;gt; legt den Kategorienamen fest (meist der Klassenname), was eine gezielte Filterung ermöglicht.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
== 3. Logging-Konfiguration (&amp;lt;code&amp;gt;appsettings.json&amp;lt;/code&amp;gt;) ==&lt;br /&gt;
&lt;br /&gt;
Die Steuerung der Logs erfolgt zentral in der &amp;lt;code&amp;gt;appsettings.json&amp;lt;/code&amp;gt;. Hier legst du fest, ab welchem Schweregrad geloggt werden soll.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;{&lt;br /&gt;
  &amp;quot;Logging&amp;quot;: {&lt;br /&gt;
    &amp;quot;LogLevel&amp;quot;: {&lt;br /&gt;
      &amp;quot;Default&amp;quot;: &amp;quot;Information&amp;quot;,&lt;br /&gt;
      &amp;quot;Microsoft.AspNetCore&amp;quot;: &amp;quot;Warning&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Default&amp;lt;/code&amp;gt;: Gilt für fast alle Kategorien.&lt;br /&gt;
* &amp;lt;code&amp;gt;Microsoft.AspNetCore&amp;lt;/code&amp;gt;: Speziell für Framework-Logs (hier werden nur Warnungen oder Höherwertiges angezeigt).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
== 4. Logging-Provider ==&lt;br /&gt;
&lt;br /&gt;
Ein Provider bestimmt, &amp;#039;&amp;#039;&amp;#039;wohin&amp;#039;&amp;#039;&amp;#039; die Logs geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Integrierte Provider:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Console:&amp;#039;&amp;#039;&amp;#039; Ausgabe im Konsolenfenster.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Debug:&amp;#039;&amp;#039;&amp;#039; Ausgabe im Visual Studio Debug-Fenster.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;EventLog:&amp;#039;&amp;#039;&amp;#039; Schreibt in das Windows-Ereignisprotokoll (nur Windows).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Drittanbieter (Empfohlen):&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Serilog:&amp;#039;&amp;#039;&amp;#039; Ein Kraftpaket für strukturiertes Logging mit vielen Zielorten (“Sinks”).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;NLog / log4net:&amp;#039;&amp;#039;&amp;#039; Etablierte Frameworks mit langer Historie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
== 5. HTTP-Logging ==&lt;br /&gt;
&lt;br /&gt;
ASP.NET Core bietet Middleware, um HTTP-Requests und -Responses automatisch zu erfassen. Dies ist ideal für Performance-Analysen und Sicherheitsaudits.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Aktivierung in &amp;lt;code&amp;gt;Program.cs&amp;lt;/code&amp;gt;:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;var builder = WebApplication.CreateBuilder(args);&lt;br /&gt;
&lt;br /&gt;
// Konfiguration der Felder&lt;br /&gt;
builder.Services.AddHttpLogging(logging =&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    logging.LoggingFields = HttpLoggingFields.All;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
var app = builder.Build();&lt;br /&gt;
&lt;br /&gt;
app.UseHttpLogging(); // Middleware hinzufügen&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wichtige &amp;lt;code&amp;gt;HttpLoggingFields&amp;lt;/code&amp;gt;:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;RequestMethod&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RequestPath&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RequestProtocol&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;ResponseStatusCode&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;RequestBody&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;ResponseBody&amp;lt;/code&amp;gt; (Achtung: Hoher Performance-Impact!).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
== 6. Serilog: Profi-Logging ==&lt;br /&gt;
&lt;br /&gt;
Serilog ist die bevorzugte Wahl für moderne .NET-Anwendungen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorteile &amp;amp;amp; Sinks:&amp;#039;&amp;#039;&amp;#039; Serilog nutzt sogenannte &amp;#039;&amp;#039;&amp;#039;Sinks&amp;#039;&amp;#039;&amp;#039;, um Logs an verschiedene Ziele zu senden:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;File Sink:&amp;#039;&amp;#039;&amp;#039; Schreibt in Textdateien (unterstützt “Rolling Files” nach Zeit oder Größe).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;MSSqlServer Sink:&amp;#039;&amp;#039;&amp;#039; Speichert Logs direkt in einer SQL-Datenbank.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Seq Sink:&amp;#039;&amp;#039;&amp;#039; Sendet Logs an Seq für Echtzeit-Suche und -Analyse.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Erweiterte Funktionen:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Enrichers:&amp;#039;&amp;#039;&amp;#039; Fügt jedem Log-Eintrag Kontext hinzu (z.B. &amp;lt;code&amp;gt;MachineName&amp;lt;/code&amp;gt; oder eine eindeutige &amp;lt;code&amp;gt;RequestId&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;IDiagnosticContext:&amp;#039;&amp;#039;&amp;#039; Ermöglicht es, zusätzliche Eigenschaften während eines Requests zu sammeln und sie gesammelt am Ende zu loggen.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Serilog Timings:&amp;#039;&amp;#039;&amp;#039; Misst die Ausführungszeit von Codeblöcken.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Konfiguration (Beispiel für &amp;lt;code&amp;gt;Program.cs&amp;lt;/code&amp;gt;):&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;builder.Host.UseSerilog((ctx, services, config) =&amp;gt; config&lt;br /&gt;
    .ReadFrom.Configuration(ctx.Configuration)&lt;br /&gt;
    .ReadFrom.Services(services));&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
== 7. Best Practices &amp;amp;amp; Interview-Tipps ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Best Practices:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Sorgfältige Auswahl:&amp;#039;&amp;#039;&amp;#039; Wähle den Provider passend zum Projekt (Serilog ist meist die beste Wahl).&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Strukturiertes Logging nutzen:&amp;#039;&amp;#039;&amp;#039; Nutze Platzhalter wie &amp;lt;code&amp;gt;{UserName}&amp;lt;/code&amp;gt; statt String-Interpolation.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Keine sensiblen Daten:&amp;#039;&amp;#039;&amp;#039; Logge niemals Passwörter, Kreditkartennummern oder personenbezogene Daten direkt.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Umgebungsanpassung:&amp;#039;&amp;#039;&amp;#039; Nutze in der Produktion höhere Log-Level (z.B. &amp;lt;code&amp;gt;Warning&amp;lt;/code&amp;gt;), um die Performance nicht zu beeinträchtigen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Interview-Fragen:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Warum strukturiertes Logging?&amp;#039;&amp;#039;&amp;#039; Es macht Logs maschinenlesbar, was die Auswertung durch Tools (wie SQL-Abfragen in Seq) erst ermöglicht.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Was ist der ILogger-Abstraktionsvorteil?&amp;#039;&amp;#039;&amp;#039; Loose Coupling – die Geschäftslogik muss nicht wissen, ob die Logs in einer Datei, einer DB oder in der Cloud landen.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Was ist ein Sink in Serilog?&amp;#039;&amp;#039;&amp;#039; Ein Zielort für Log-Ereignisse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Erstellt für Thorsten am 27. Februar 2026&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;#039;&amp;#039;Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>imported&gt;Import</name></author>
	</entry>
</feed>