web-dev-qa-db-ja.com

ASP.NET Core 1.0ログ

ASP.NET Core web apiプロジェクトがあります。ここで、エラーとイベントをlogに記録します。以前プロジェクトでELMAHを使用しましたが、elmahはASP.NET Coreでは使用できないようです。マイクロソフトが提供するデフォルトのロギングサービスを設定するために、 この公式リンク を参照しました。これらのログをテキストファイルまたはデータベースに保存する方法はどこにもありません。

ASP.NET Coreに既にデフォルトのロギング機能がある場合、elmahやlog4netなどの他のツールを使用する必要があるのはなぜですか。したがって、デフォルトのログを実装する記事を検索して、ログをdbまたはテキストファイルに保存したところ、何も見つかりませんでした。ログのASP.NETコアの組み込みサポートを使用してログをファイルに保存する方法はありますか?

私は現在、完全に動作するSerilogを使用しています。また、ブラウザでログを正常に表示するためにseqもダウンロードしています。ただし、組み込みのasp.netコアログ機能を使用して同じように実現するにはどうすればよいのか、まだ疑問に思っています。

Serilogを使用したログファイル:

Seq:を使用して表示されるログ enter image description here

14
Avi-B

私は、ASP.NET Coreログに関するブログ投稿のために、このトピックについてたくさんの研究をしました。私は組み込みのロギング、NLog、SeriLog、log4netを調べました。

基本的に私が見つけたのは、組み込みのILoggerFactoryは正常に動作しますが、明白な問題が1つあります:ファイルに書き込みません。コンソール、デバッグ、ETW、およびその他の一部のプロバイダーをサポートしていますが、ファイルはサポートしていません。最大ファイルサイズ、ローテーション、およびそれに伴うその他すべてのものについて心配する必要がある場合、ファイルは非常に複雑になるためと思います。

組み込みのロギングは.NETの内部に最適であり、ファイルに書き込む必要がないため、.NETチームの制限ではありません。 SerilogとNLogはどちらも、ファイルの書き込みを可能にする小さな拡張機能を提供します。もちろん、これらのライブラリは、全体的に多くの機能を提供します。

Serilogの拡張には1行のコードが必要で、ファイルのログ記録が追加されます。あなたはそれについてここで読むことができます: https://github.com/serilog/serilog-extensions-logging-file

これが役立つ場合のASP.NET Coreロギングに関する私のブログ投稿は次のとおりです。 https://stackify.com/asp-net-core-logging-what-c​​hanged/

本当に簡単なロギングが必要な場合は、ファイル拡張子を使用して組み込みのロギングを機能させることができます。出力形式の制御、外部サービスへのロギング、ファイルローテーション、最大ファイルサイズなどの高度な機能を利用したい場合は、すぐにNLogまたはSerilogを使用してください。

3
Matt Watson

デフォルトではASP.NET Core標準に基づいている場合のロギング。NET Core抽象化とその抽象化の実装。提供する link は、ロギングサービスを利用するために従う必要があるものです。これらは、たとえばデバッグ時に標準出力(出力ウィンドウ)に書き込みます。

具体的に探している部分はweb.config。以下を検討してください。

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

stdoutLogEnabledおよびstdoutLogFile を探しています。

stdoutLogEnabled trueの場合、processPathで指定されたプロセスのstdoutおよびstderrstdoutLogFileで指定されたファイルにリダイレクトされます。

そして

stdoutLogFileprocessPathで指定されたプロセスからのstdoutおよびstderrがログに記録される相対または絶対ファイルパスを指定します。相対パスは、サイトのルートを基準にしています。 「。」で始まるすべてのパスはサイトルートからの相対パスであり、他のすべてのパスは絶対パスとして扱われます。

ASP.NET Coreモジュールの詳細については、 IISへの発行 も参照してください。

7
David Pine

ASP.NET Coreの組み込みログをELMAHと実際に比較することはできません。 ASP.NET Coreログはシンプルなログフレームワークであり、何をいつログに記録するかを指定する必要があります。 ELMAHはすべての未処理の例外を自動的にキャッチし、失敗した要求に関する多くのコンテキスト情報をログに記録します。 Seqシンクは実際にこの動作の一部を実装しました。これにより、Protocol、RequestIdなどの追加情報がSeqを通じて利用可能になりますが、これはASP.NETのロギングですぐに利用できるものではありません。

ASP.NETロギングはまだ新しいので、他のフレームワークや宛先のロガーが表示されるようになります。ファイルベースのロギングが間もなく実装され、ELMAHもASP.NET Coreに確実に移植されると確信しています。詳細については、私のブログ投稿 ASP.NET Core Logging Tutorial を参照してください。

2
ThomasArdal

ASP.NET Coreのログサブシステムはまだファイルロガーを提供していませんが、 作成については検討中 です。

執筆時点では、この目的でSerilogまたはNLogを使用するのが適切です。

2