11

Ich habe ASP.NET Core Web API Projekt. Jetzt möchte ich log die Fehler und Ereignisse. Ich habe früher ELMAH in meinem Projekt verwendet, aber es scheint, dass Elmah nicht für ASP.NET Core verfügbar ist. Ich habe mich auf this Official link für die Konfiguration des Standardprotokollierungsdienstes von Microsoft bezogen. Ich sehe nirgendwo, wie ich diese Protokolle in der Textdatei oder in der Datenbank speichern könnte.ASP.NET Core 1.0 Protokollierung

Wenn ASP.NET Core bereits Standardprotokollfunktionalität hat, frage ich mich, warum sollte ich andere Tools wie elmah, log4net verwenden. Also wieder, als ich nach einem Artikel suchte, der die Standardprotokollierung implementiert, um die Protokolle in db oder in der Textdatei zu speichern, konnte ich keine finden. Gibt es eine Möglichkeit, wie können wir die Log-Dateien mit Hilfe von ASP.NET Kern eingebaute Unterstützung für die Protokollierung speichern?

Ich verwende derzeit Serilog, die perfekt funktioniert und auch Seq heruntergeladen für die anmutige Anzeige der Protokolle im Browser. Wie auch immer, ich frage mich immer noch, wie ich das gleiche erreichen könnte, indem ich die Kernprotokollierungsfunktion von asp.net nutze.

Log File Serilog mit:

Logs angezeigt mit Seq: enter image description here

Antwort

5

standardmäßig die ASP.NET Core- Protokollierung, wenn .NET-Core auf der Standard-basierten Abstraktionen und die Implementierungen für die Abstraktionen. Die link, die Sie bereitstellen, ist genau das, was Sie für die Protokolldienste verwenden möchten. Diese schreiben zum Beispiel beim Debugging in die Standardausgabe (Ausgabefenster).

Der Teil, den Sie speziell suchen, ist die web.config. Beachten Sie Folgendes:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.webServer> 
    <handlers> 
     <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" 
      resourceType="Unspecified" /> 
    </handlers> 
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" 
       forwardWindowsAuthToken="false" stdoutLogEnabled="true" 
       stdoutLogFile="C:\temp\logs\log.log" /> 
    </system.webServer> 
</configuration> 

Sie sind für die stdoutLogEnabled and stdoutLogFile suchen.

stdoutLogEnabled Wenn das stimmt, stdout und Stderr für den Prozess in processPath angegebenen in die Datei in stdoutLogFile angegeben umgeleitet werden.

Und

stdoutLogFile Gibt den relativen oder absoluten Dateipfad für die stdout und stderr aus dem Prozess in processPath angegeben protokollierte. Relative Pfade sind relativ zum Stamm der -Site. Jeder Pfad, der mit '.' Beginnt, ist relativ zum Site-Root und alle anderen Pfade werden als absolute Pfade behandelt.

Siehe auch Publishing to IIS für Details über den ASP.NET Core- Modul.

+0

Vergessen Sie nicht, den Ordner enthalten die Protokolle in die der Lösungsstruktur hinzuzufügen und es auch Liste in den publishOptions von project.json https://docs.asp.net/en/latest/hosting/directory- Struktur.html. Habe das einfach gemacht und funktioniert super und benennt die Dateien mit einer datumsbasierten Namenskonvention (zB stdout_8440_201691620225.log). Ein wenig zu umständlich, aber das lässt sich optimieren. –

2

ASP.NET Core Logging-Subsystem wurde noch keine Datei Logger liefern, obwohl creating one is being discussed.

Zum Zeitpunkt des Schreibens, Serilog oder NLog für diesen Zweck verwendet, ist der Weg zu gehen.

+0

Und funktioniert Serilog.Sinks.MSSqlServer mit asp.net Core. Installation selbst der neuesten Beta-Version erwartet Serilog-Version <2.0. –

2

Sie können die integrierte Protokollierung in ASP.NET Core nicht wirklich mit ELMAH vergleichen. ASP.NET Core Logging ist ein einfaches Logging-Framework, in dem Sie ihm mitteilen müssen, wann und wo es protokolliert werden soll. ELMAH fängt automatisch alle nicht behandelten Ausnahmen ab und protokolliert eine Menge kontextabhängiger Informationen über die fehlgeschlagene Anfrage. Die Seq-Senke hat tatsächlich etwas von diesem Verhalten implementiert, das zusätzliche Informationen wie Protocol, RequestId und ähnliches über Seq zur Verfügung stellt, aber das ist nichts, was Sie mit der ASP.NET-Protokollierung auspacken.

ASP.NET Logging ist noch brandneu, warum Logger für andere Frameworks und Destinationen werden beginnen zu erscheinen. Ich bin mir sicher, dass die dateibasierte Protokollierung in Kürze implementiert wird und ELMAH sicher auch auf ASP.NET Core portiert wird. Weitere Informationen finden Sie in meinem Blogpost: ASP.NET Core Logging Tutorial.

1

Ich habe gerade eine Menge Forschung zu diesem Thema für einen Blogbeitrag über ASP.NET Core Logging gemacht. Ich schaute auf die integrierte Protokollierung sowie NLog, SeriLog und log4net.

Grundsätzlich, was ich fand, ist die integrierte ILoggerFactory funktioniert gut, aber hat eine eklatante Problem: es wird nicht in Datei schreiben. Es unterstützt Console, Debug, ETW und einige andere Anbieter, aber keine Dateien. Ich nehme an, weil Dateien ziemlich kompliziert sind, wenn Sie anfangen müssen, sich über maximale Dateigrößen, Rotationen und all die anderen Sachen zu sorgen, die damit einhergehen.

Die in Protokollierung gebaut arbeitet für .NET Interna groß, und da sie in Dateien schreiben müssen es nicht, wirklich ist keine Einschränkung für das .NET-Team. Serilog und NLog bieten beide kleine Erweiterungen, um das Schreiben von Dateien zu ermöglichen. Natürlich bieten diese Bibliotheken auch viel mehr Funktionalität auf der ganzen Linie.

Serilogs Erweiterung benötigt eine Codezeile und fügt Dateiprotokollierung hinzu. Sie können hier darüber lesen: https://github.com/serilog/serilog-extensions-logging-file

Hier ist mein Blog-Post über ASP.NET Core-Protokollierung, wenn es hilft: https://stackify.com/asp-net-core-logging-what-changed/

Ich würde sagen, wenn Sie wirklich einfache Protokollierung haben braucht man kann das in-built machen Logging Arbeit, mit der Dateierweiterung. Sobald Sie in irgendwelche erweiterten Funktionen wie Kontrolle des Ausgabeformats, Protokollierung auf externe Dienste, Dateirotation, maximale Dateigröße usw. eintreten wollen, werden Sie NLog oder Serilog verwenden wollen.