【问题标题】:How do I enable logging in Thinktecture IdentityServer v3?如何在 Thinktecture IdentityServer v3 中启用日志记录?
【发布时间】:2015-06-21 04:13:17
【问题描述】:

如何在 Thinktecture IdentityServer v3 中启用登录功能?

我目前收到一个通用错误页面,显示“出现意外错误”。

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

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

【问题讨论】:

    标签: thinktecture-ident-server identityserver3


    【解决方案1】:

    我不是专家,但我对 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

    除了首先安装必要的包或引用所需的 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。

    【讨论】:

    • 谢谢米哈尔。我已经详细说明了您的答案。
    • 'LogProvider 来自哪里?当我输入“LogProvider”和“点”时,我看到了“CreateLogProvider”。不是“SetCurrentLogProvider”。我已经安装了“LibLog”
    • @Mohan 我的答案是针对 1 年前的 IdentityServer v3。您可能正在使用其他版本。
    • 这是 IdentityServer v3。
    • 我得到了同样的结果 - 日志命名空间中只有一个 noop 提供程序,而我所看到的没有相关的包?
    【解决方案2】:

    按照最新版本HERE 的文档,您可以在Startup.cs 中设置Log.Logger

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

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

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

    【讨论】:

    • 很抱歉对这个旧答案发表评论。为了使它在 ASP.NET Core 2.0 项目上工作,我做了以下 1) 将上述代码添加到 Startup 类的构造函数中。 2) 在启动类的Configure方法中增加了附加参数ILoggerFactory logFactory。 3)在配置方法中添加了这一行logFactory.AddSerilog();
    【解决方案3】:

    【讨论】:

    • 当你告诉库的作者“很好找”时,这有点有趣。 :)
    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-05-02
      • 1970-01-01
      • 2015-03-18
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      相关资源
      最近更新 更多