如何在 Thinktecture IdentityServer v3 中启用日志记录?

How do I enable logging in Thinktecture IdentityServer v3?

如何在 Thinktecture IdentityServer v3 中启用日志记录?

我目前收到一个通用错误页面,显示 "There was an unexpected error"。

我发现 ErrorPageFilterAttribute 返回了一般错误,它似乎解决了 ILog 的某些实现,用于记录我所关注的详细信息。

我怀疑这是 ILog 的一些具体实现,需要以某种方式进行配置。

我不是专家,但我对 IdentityServer 有所了解,所以我可以提供帮助。 IdentityServer v3 支持一些日志提供程序,例如 NLog、Log4Net 或 Serilog。你必须 select 你想使用哪一个并配置它。

要查看示例操作方法,我建议下载以下使用 NLog 的项目 IdentityServer3.Samples with samples from github. There, among others, you will find WebHost (minimal)WebHost(最小) 是一个示例,它显示了带有 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 (more customization) 展示了如何使用 LibLog。

或者简单地阅读文档:

https://identityserver.github.io/Documentation/docsv2/configuration/logging.html

有一个 log4net 陷阱,由于某种原因它没有写入新的日志文件。我的 startup.cs 字面上包括这个:

Log.Debug("starting log.  do not remove this line.");
LogProvider.GetLogger(typeof(Startup)).Log(LogLevel.Debug, () => "starting up");

我不知道为什么,我只知道在它起作用之前我撕掉了一堆头发。

根据上一版本的文档 HERE,您只需在 Startup.cs.

中设置 Log.Logger

例如使用Serilog(通过搜索Serilog通过Nuget安装)你可以通过在[=14的Configuration方法中添加这行代码来设置日志到一个文件=] class

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();

有关更多选项,请参阅上面的文档 link。