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

时间:2015-04-15 09:12:40

标签: thinktecture-ident-server identityserver3

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

我目前正在收到一个通用错误页面,说“出现了意外错误”。

我能够弄清楚ErrorPageFilterAttribute返回的一般错误似乎解决了ILog的某些实现,以记录我之后的详细信息。

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

4 个答案:

答案 0 :(得分:9)

我不是专家,但我对IdentityServer有所了解,所以我可以提供帮助。 IdentityServer v3支持一些日志记录提供程序,例如NLog,Log4Net或Serilog。您必须选择要使用的那个并进行配置。

要查看示例如何操作,我建议使用github中的示例下载以下项目IdentityServer3.Samples。除此之外,您将找到使用NLog的WebHost (minimal)项目。 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

除了首先安装必要的软件包或引用所需日志提供程序所需的库之外,还需要将其设置为在启动期间成为当前的日志提供程序,如下所示。

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。

答案 1 :(得分:6)

根据上一版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();

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

答案 2 :(得分:4)

答案 3 :(得分:0)

有一个log4net问题,由于某种原因,它不会写入新的日志文件。我的startup.cs字面上包括:

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

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