日志


layout: docs-default

日志

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

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

  • NLog
  • Enterprise Library
  • SeriLog
  • Log4Net
  • Loupe

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

诊断配置

LoggingOptions 类有下面的配置选项:

  • EnableWebApiDiagnostics
    • 启用后,Web Api内部诊断信息会输出到日志库
  • WebApiDiagnosticsIsVerbose
    • 启用后,会输出Web API的详细(Verbose)诊断信息。
  • EnableHttpLogging
    • 启用后,HTTP请求和响应信息会被输出到日志
  • EnableKatanaLogging
    • 启用后,Katana诊断信息会输出到日志库。(在调试第三方登陆时比较有用.)

例子: 使用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 来查阅日志.


  
    
      
      
    
  

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

例子: 输出到控制台

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

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

调试自己的代码

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

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

用这个实例记录日志

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

使用自己的日志基础设施

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

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

阻止所有的日志输出

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

LogProvider.SetCurrentLogProvider(new NoopLogProvider());

你可能感兴趣的:(日志)