日志

2017-02-25  本文已影响192人  灭蒙鸟

layout: docs-default

日志

IdentityServer有两个日志相关特性,开发时日志和生产环境事件 (详情).
开发时日志有大量输出,在开发者定制IdentityServer时非常有用,在学习IdentityServer时也可以了解IdentityServer内部逻辑。输出里面会带有一些敏感信息(比如密码什么的),不可以用在生产环境。

IdentityServer 使用 LibLog 做日志.
Liblog自动挑选下面的日志库进行日志:

IdentityServer3本身没有任何日志配置,只需要按照上面的日志库的要求配置托管程序就好。

诊断配置

LoggingOptions 类有下面的配置选项:

例子: 使用Serilog输出日志到 System.Diagnostics tracing

下面的例子使用 Serilog输出日志到diagnostics trace (把它放在托管程序的Startup中。)
注意: Serilog 把不同的日志sink放在不同的程序包中,这个例子中,我们需要安装Serilog.Sinks.Trace 包来启用WriteTo.Trace() 方法.

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.Trace()
    .CreateLogger();

在配置文件中加入下面的配置信息,把日志输出到一个简单文件。
我们使用Baretail 来查阅日志.

<system.diagnostics>
  <trace autoflush="true"
         indentsize="4">
    <listeners>
      <add name="myListener"
           type="System.Diagnostics.TextWriterTraceListener"
           initializeData="Trace.log" />
      <remove name="Default" />
    </listeners>
  </trace>
</system.diagnostics>

注意:使用这个方法需要托管程序有对日志文件的写权限。如果没有指定目录,这个文件会生成在应用程序根目录。(生产环境不推荐这样做),在生产环境需要把日志文件放在应用程序目录之外。

例子: 输出到控制台

输出到控制台可以让我们零触感即时了解IdentityServer内部发生的事情。Serilog有一个漂亮的彩色的日志sink,叫做Serilog.Sinks.Literate. 可以如下启用:

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Debug()
    .WriteTo.LiterateConsole()
    .CreateLogger();

调试自己的代码

我们也可以利用日志系统来记录我们自己的扩展代码。
在类里面增加一个ILog实例,如下面的代码:。

private readonly static ILog Logger = LogProvider.For<MyClass>();

用这个实例记录日志

Logger.Debug("Getting claims for identity token");

使用自己的日志基础设施

你也许已经有了一个日志框架,希望IdentityServer把日志输出到那里面。
推荐的方式是,选择一个日志库(NLog, Log4Net etc.),给这个日志库写一个自定义Sink。(我们喜欢Serilog).
Serilog的例子请看这里.

请看这里 了解使用Serilog处理日志和事件.

阻止所有的日志输出

(v2.5新增)
在某些场景里(比如:生产环境),我们不喜欢产生任何日志。这种情况下可以配置空(no-op)日志器 (在Startup或者托管代码里面):

LogProvider.SetCurrentLogProvider(new NoopLogProvider());
上一篇 下一篇

猜你喜欢

热点阅读