Skip to content

Logging

Log-Einstellungen können über die Konfiguration in der Sektion Serilog vorgenommen werden. Serilog ist die verwendete Log-Bibliothek. Mit sogenannten Sinks kann Serilog verschiedene Formate und Speichersysteme unterstützen.

Verfügbare Log-Level

Mit dem Festlegen des MinimumLevel, ist die Protokollierung für Nachrichten auf dem angegebenen Level (0-5) und höher aktiviert. Der Standard-Level ist Information. Es gibt folgende Level:

  • Verbose | Trace = 0
  • Debug = 1
  • Information = 2
  • Warning = 3
  • Error = 4
  • Fatal | Critical | None = 5

Logger konfigurieren

Das folgende Beispiel zeigt eine Konfiguration, die Logdateien in den Pfad C:\CMI_STS\Log schreibt. Der Log-Level kann für verschiedene Namespaces unterschiedlich festgelegt werden, in dem Serilog.MinimumLevel.Override.<Namespace> auf einen LogLevel gesetzt wird. Default wird als Standard-Level verwendet. Die Namespaces Duende.IdentityServer und CMI sollten bei der Fehleranalyse auf den Level Debug oder Verbose gestellt werden, für den produktiven Betrieb auf Information gestellt werden.

{
    "Serilog": {
        "MinimumLevel": {
          "Default": "Information",
          "Override": {
            "Duende.IdentityServer": "Information",
            "CMI": "Information",
            "System": "Warning",
            "Microsoft": "Warning",
            "Microsoft.Hosting.Lifetime": "Information",
            "Microsoft.AspNetCore.Authentication": "Information"
          }
        },
        "Using": ["Serilog.Sinks.File"],
        "WriteTo": [
            {
                "Name": "File",
                "Args": {
                    "rollingInterval": "Day",
                    "rollOnFileSizeLimit": true,
                    "fileSizeLimitBytes": 100000,
                    "path": "C:\\CMI_STS\\Log\\sts-.txt"
                }
            }
        ]
    }
}

Die folgenden Quellen beschreiben die Konfigurationsmöglichkeiten von Serilog:

Sinks

Es sind die folgenden Sinks installiert:

  • File (Schreiben in Dateien)
  • Console (Ausgabe auf der Konsole)
  • Seq (Senden von Logs an einen Seq-Server)
  • ApplicationInsights (Senden von Logs an Microsoft Application Insights)

Wichtig: Serilog wird beim Start der Anwendung zuerst zur Ausgabe auf die Konsole konfiguriert. Diese Einstellung wird später durch die Konfiguration überschrieben. Sollte es zu Fehlern zwischen dem Start der Anwendung und dem Laden der Log-Konfiguration kommen, sind diese Fehler nur auf der Konsole sichtbar, oder beim Hosting mittels IIS im Standard-Output-Stream-Log (stdoutLog).

Application Insights

Das folgende Beispiel zeigt eine mögliche Konfiguration in der JSON-Ausprägung in der Datei appsettings.json für den Sink ApplicationInsights: Der instrumentationKey kann der Application Insights im Azure Portal entnommen werden.

{
    "Serilog": {
    "Using": [
      "Serilog.Sinks.ApplicationInsights"
    ],
    "Enrich": [ "FromLogContext" ],
    "Properties": {
      "Application": "CMI STS"
    },
    "WriteTo": [
      {
        "Name": "ApplicationInsights",
        "Args": {
          "telemetryConverter": "Serilog.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights",
          "instrumentationKey": "00000000-0000-0000-0000-000000000000"
        }
      }
    ]
  }
}

Standard-Output-Stream des Hosting-Prozesses (IIS Hosting)

Das Log des Standard-Output-Stream des Hosting-Prozesses sollte normalerweise deaktiviert sein. Wenn der CMI STS nicht startet oder sofort abstürzt, kann dieses Log zeitweise eingeschaltet werden. Das Windows-Event-Log enthält möglicherweise weitere Informationen.

In der XML-Datei web.config können folgende Attribute des Elements aspNetCore angepasst werden:

  • stdoutLogEnabled: true aktiviert das Log.
  • stdoutLogFile: Dateipfad, in den das Log geschrieben wird.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      [...]
      <aspNetCore [...] stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
    </system.webServer>
  </location>
</configuration>