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 来查阅日志.
<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());
网友评论