11

私はASP.NETコアWebのapiプロジェクトを持っています。今私はログにエラーとイベントしたいと思います。以前私のプロジェクトでELMAHを使用しましたが、elmahはASP.NETコアでは使用できないようです。マイクロソフトが提供する既定のログサービスの構成については、this Official linkを参照しました。これらのログをテキストファイルまたはデータベースに保存する方法はどこにもありません。ASP.NETコア1.0のログ

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

私は現在、完全に動作するSerilogを使用しており、ブラウザにログを正常に表示するためにseqもダウンロードしています。しかし、私はまだasp.netコアの組み込み機能を使って同じことを達成することができますか? Serilogを使用して

ログファイル:

ログは、配列を使用して表示:デフォルトでは enter image description here

答えて

5

標準.NETのコアに基づく場合ASP.NETコアログ抽象化および前記抽象化のための実装を含む。提供している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 and stdoutLogFileを探しています。

trueの場合、 STDOUTstdoutLogFileで指定したファイルにリダイレクト なります processPathで指定 プロセスの stderrの stdoutLogEnabled。

そして

stdoutLogFileprocessPathで指定されたプロセス からstdoutとstderrが記録される の相対または絶対ファイルパスを指定します。 相対パスは サイトのルートからの相対パスです。 '。'で始まるパスはサイトルートに対して となり、他のすべてのパス は絶対パスとして扱われます。

またASP.NETコアモジュールの詳細についてはPublishing to IISを参照してください。

+0

解決策の構造にログインするフォルダを追加することを忘れないでください。また、project.jsonのpublishOptionsにもhttps://docs.asp.net/en/latest/hosting/directory- structure.html。ちょうどこれを行い、うまく動作し、日付ベースの命名規則(stdout_8440_201691620225.logなど)でファイルに名前を付けます。少し冗長すぎるが、それは微調整できる。 –

2

ASP.NETコアのログサブシステムは、まだcreating one is being discussedですが、ファイルロガーを提供していません。

執筆時点では、この目的のためにSerilogまたはNLogを使用する方法があります。

+0

Serilog.Sinks.MSSqlServerはasp.netコアで動作します。最新のベータ版をインストールする場合も、serilogバージョン<2.0が必要です。 –

2

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

ASP.NETロギングはまだまだ新しいもので、他のフレームワークと送信先のロガーがなぜ登場するのでしょうか。まもなくファイルベースのロギングが実装され、ELMAHも確実にASP.NETコアに移植されると確信しています。詳細については、私のブログ記事:ASP.NET Core Logging Tutorialをチェックしてください。

1

私は、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コアロギングについての私のブログの記事です:あなたは本当に簡単な伐採はあなたが作ることができる必要がある場合https://stackify.com/asp-net-core-logging-what-changed/

私が言うと思いビルトインファイル拡張子を使用してログを記録します。出力フォーマットの制御、外部サービスへのロギング、ファイルのローテーション、最大ファイルサイズなどのような高度な機能に着手するとすぐに、NLogまたはSerilogを使用することになります。

関連する問題