如何在 Thinktecture IdentityServer v3 中启用日志记录?
我目前收到一个通用错误页面,显示“出现意外错误”。
我能够弄清楚ErrorPageFilterAttribute
,似乎解决了一些实现ILog
记录我所追求的细节的通用错误。
我怀疑这是ILog
需要以某种方式配置的一些具体实现。
如何在 Thinktecture IdentityServer v3 中启用日志记录?
我目前收到一个通用错误页面,显示“出现意外错误”。
我能够弄清楚ErrorPageFilterAttribute
,似乎解决了一些实现ILog
记录我所追求的细节的通用错误。
我怀疑这是ILog
需要以某种方式配置的一些具体实现。
我不是专家,但我对 IdentityServer 有所了解,所以我可以提供帮助。IdentityServer v3 支持一些日志记录提供程序,例如 NLog、Log4Net 或 Serilog。您必须选择要使用的并对其进行配置。
要查看示例如何操作,我建议从 github下载以下项目IdentityServer3.Samples和示例。在那里,您会发现使用 NLog的 WebHost(最小)项目。WebHost (minimal)是一个示例,它显示了带有 IIS 的 IdentityServer v3 的基本(最小)配置。
另一个项目SelfHost (Minimal with Serilog)展示了当 IdentityServer 由控制台应用程序托管(没有 IIS)时如何使用 Serilog 登录场景。
编辑:
命名空间有Thinktecture.IdentityServer.Core.Logging
几个实现。ILogProvider
这是其中的几个。
Log4NetLogProvider
,使用log4net。
NLogLogProvider
,使用NLog。
DiagnosticsTraceLogProvider
, 那使用System.Diagnostics.Trace
.
TraceSourceLogProvider
, 那使用System.Diagnostics.TraceSource
.
除了首先为所需的 Log Provider 安装必要的包或引用必要的库之外,您还需要在启动期间将其设置为当前的 Log Provider,如下所示。
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。
按照最新版本的文档在这里,您可以Log.Logger
在您的Startup.cs
.
例如使用Serilog (通过 Nuget 通过搜索 Serilog 安装它),您可以通过在类的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");
我不知道为什么,我只知道在它起作用之前我撕掉了一堆头发。