web-dev-qa-db-fra.com

Journalisation ASP.NET Core 1.0

J'ai le projet d'api web ASP.NET Core . Maintenant, je veux enregistrer les erreurs et les événements. J'ai déjà utilisé ELMAH dans mon projet mais il semble qu'elmah ne soit pas disponible pour ASP.NET Core. J'ai fait référence à ce lien officiel pour configurer le service de journalisation par défaut fourni par Microsoft. Je ne vois nulle part comment pourrais-je enregistrer ces journaux dans le fichier texte ou dans la base de données.

Si ASP.NET Core dispose déjà d'une fonctionnalité de journalisation par défaut, je me demande pourquoi devrais-je utiliser d'autres outils comme elmah, log4net. Encore une fois, lorsque j'ai recherché un article qui implémente la journalisation par défaut pour enregistrer les journaux dans db ou dans un fichier texte, je n'en ai trouvé aucun. Existe-t-il un moyen de sauvegarder les journaux dans le fichier à l'aide de la prise en charge intégrée du noyau ASP.NET pour la journalisation?

J'utilise actuellement Serilog qui fonctionne parfaitement et j'ai également téléchargé seq pour afficher les journaux gracieusement dans le navigateur. Cependant, je me demande toujours comment obtenir la même chose en utilisant la fonctionnalité de journalisation intégrée asp.net.

Fichier journal à l'aide de Serilog:

Journaux affichés à l'aide de Seq: enter image description here

14
Avi-B

Je viens de faire un tas de recherches sur ce sujet pour un article de blog sur la journalisation ASP.NET Core. J'ai regardé la journalisation intégrée ainsi que NLog, SeriLog et log4net.

Fondamentalement, ce que j'ai trouvé est que l'ILoggerFactory intégré fonctionne bien mais a un problème flagrant: il n'écrira pas dans le fichier . Il prend en charge la console, le débogage, ETW et certains autres fournisseurs, mais pas les fichiers. Je suppose que les fichiers sont assez compliqués lorsque vous devez commencer à vous soucier de la taille maximale des fichiers, des rotations et de tout le reste.

La journalisation intégrée fonctionne très bien pour les internes .NET et comme ils n'ont pas besoin d'écrire dans des fichiers, ce n'est vraiment pas une limitation pour l'équipe .NET. Serilog et NLog fournissent tous deux de petites extensions pour permettre l'écriture de fichiers. Bien sûr, ces bibliothèques offrent également beaucoup plus de fonctionnalités à tous les niveaux.

L'extension de Serilog nécessite une ligne de code et ajoute la journalisation des fichiers. Vous pouvez en lire plus ici: https://github.com/serilog/serilog-extensions-logging-file

Voici mon article de blog sur la journalisation ASP.NET Core si cela aide: https://stackify.com/asp-net-core-logging-what-changed/

Je dirais que si vous avez des besoins de journalisation vraiment simples, vous pouvez faire fonctionner la journalisation intégrée, avec l'extension File. Dès que vous souhaitez accéder à des fonctions avancées telles que le contrôle du format de sortie, la connexion à des services externes, la rotation des fichiers, la taille maximale des fichiers, etc., vous souhaiterez utiliser NLog ou Serilog.

3
Matt Watson

Par défaut, la journalisation ASP.NET Core si elle est basée sur la norme . NET Core les abstractions et les implémentations de ces abstractions. Le lien que vous fournissez est exactement ce que vous voulez suivre pour consommer les services de journalisation. Ceux-ci écriront sur la sortie standard (fenêtre de sortie) par exemple lors du débogage.

La partie que vous recherchez spécifiquement est la web.config. Considérer ce qui suit:

<?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>

Vous recherchez stdoutLogEnabled et stdoutLogFile .

stdoutLogEnabled Si vrai, stdout et stderr pour le processus spécifié dans processPath sera redirigé vers le fichier spécifié dans stdoutLogFile.

Et

stdoutLogFile Spécifie le chemin de fichier relatif ou absolu pour lequel stdout et stderr du processus spécifié dans processPath seront enregistrés. Les chemins relatifs sont relatifs à la racine du site. Tout chemin commençant par "." Sera relatif à la racine du site et tous les autres chemins seront traités comme des chemins absolus.

Voir également Publication sur IIS pour plus de détails sur le module ASP.NET Core .

7
David Pine

Vous ne pouvez pas vraiment comparer la journalisation intégrée dans ASP.NET Core à ELMAH. La journalisation ASP.NET Core est un cadre de journalisation simple, dans lequel vous devez lui indiquer quoi consigner et quand. ELMAH intercepte automatiquement toutes les exceptions non gérées et enregistre de nombreuses informations contextuelles sur la demande ayant échoué. Le récepteur Seq a effectivement mis en œuvre une partie de ce comportement, ce qui rend des informations supplémentaires telles que Protocol, RequestId et similaires disponibles via Seq, mais ce n'est pas quelque chose que vous obtiendrez hors de la boîte avec la journalisation ASP.NET.

La journalisation ASP.NET est encore toute nouvelle, pourquoi les enregistreurs pour d'autres frameworks et destinations commenceront à apparaître. Je suis sûr que la journalisation basée sur les fichiers sera bientôt implémentée et ELMAH sera également porté sur ASP.NET Core à coup sûr. Pour plus d'informations, consultez mon article de blog: Tutoriel de journalisation ASP.NET Core .

2
ThomasArdal

Le sous-système de journalisation d'ASP.NET Core ne fournit pas encore d'enregistreur de fichiers, bien que en créer un est en cours de discussion .

Au moment de la rédaction de ce document, l'utilisation de Serilog ou NLog à cette fin est la voie à suivre.

2
Nicholas Blumhardt