Thinktecture IdentityServer v3でログを有効にするにはどうすればよいですか?
現在、「予期しないエラーが発生しました」という一般的なエラーページが表示されます。
私は、一般的なエラーがErrorPageFilterAttribute
によって返されることを理解できました。これは、私が求めている詳細をログに記録するためのILog
の実装を解決するようです。
なんらかの方法で構成する必要があるのは、ILog
の具体的な実装だと思います。
または単にドキュメントを読んでください:
https://identityserver.github.io/Documentation/docsv2/configuration/logging.html
私は専門家ではありませんが、IdentityServerについて何か知っているので、手助けできるかもしれません。 IdentityServer v3は、NLog、Log4Net、Serilogなどのいくつかのロギングプロバイダーをサポートしています。使用するものを選択して構成する必要があります。
サンプルを表示するには、次のプロジェクトをダウンロードすることをお勧めします IdentityServer3.Samples githubからのサンプルを使用します。とりわけ、NLogを使用する WebHost(minimal) プロジェクトがあります。 WebHost(最小)は、IISを使用したIdentityServer v3の基本的な(最小)構成を示す例です。
別のプロジェクト SelfHost(Serilogを使用する最小) は、IdentityServerがコンソールアプリケーション(IISなし)によってホストされている場合に、Serilogを使用してシナリオにログインする方法を示しています。
編集:
Thinktecture.IdentityServer.Core.Logging
名前空間には、ILogProvider
のいくつかの実装があります。ここにそれらのいくつかがあります。
Log4NetLogProvider
、 log4net を使用します。
NLogLogProvider
、 NLog を使用します。
DiagnosticsTraceLogProvider
、これはSystem.Diagnostics.Trace
を使用します。
TraceSourceLogProvider
、これはSystem.Diagnostics.TraceSource
を使用します。
最初に必要なパッケージをインストールするか、目的のログプロバイダーに必要なライブラリを参照することに加えて、このように、起動時に現在のログプロバイダーになるように設定する必要があります。
LogProvider.SetCurrentLogProvider(new DiagnosticsTraceLogProvider());
現在のログプロバイダーが使用する基になるパッケージまたはライブラリを構成するために必要な手順を引き続き実行してください。たとえば、次の構成をDiagnosticsTraceLogProvider
で使用できます。
<configuration>
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add name="TextWriter"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="Trace.log" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
編集2
私が答えを書いたので、いくつかの詳細が変更されました。現在、IdentityServerはLibLogライブラリを使用しており、ILogProviderのさまざまな実装を見つけることができます。
プロジェクト Custom Grants(その他のカスタマイズ) は、LibLogの使用方法を示しています。
前回のリリースのドキュメントに従って [〜#〜] here [〜#〜]Log.Logger
にStartup.cs
を設定するだけです。
たとえば、 Serilog (Serilogを検索してNuget経由でインストール)を使用すると、Configuration
クラスのStartup
メソッドにこのコード行を追加することで、ログをファイルに設定できます。
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug() // change with your desired log level
.WriteTo.File(@"C:\myPath.txt") // remember to assign proper writing privileges on the file
.CreateLogger();
その他のオプションについては、上記のドキュメントリンクを参照してください。
何らかの理由で新しいログファイルに書き込まないlog4netの落とし穴があります。私のstartup.csには文字通りこれが含まれています:
Log.Debug("starting log. do not remove this line.");
LogProvider.GetLogger(typeof(Startup)).Log(LogLevel.Debug, () => "starting up");
理由はわかりません。これが機能する前に、髪の毛をたくさん引き裂いたことを知っています。