layout: docs-default
日志
IdentityServer有兩個日志相關(guān)特性缅阳,開發(fā)時日志和生產(chǎn)環(huán)境事件 (詳情).
開發(fā)時日志有大量輸出,在開發(fā)者定制IdentityServer時非常有用命锄,在學(xué)習(xí)IdentityServer時也可以了解IdentityServer內(nèi)部邏輯。輸出里面會帶有一些敏感信息(比如密碼什么的),不可以用在生產(chǎn)環(huán)境偏化。
IdentityServer 使用 LibLog 做日志.
Liblog自動挑選下面的日志庫進(jìn)行日志:
- NLog
- Enterprise Library
- SeriLog
- Log4Net
- Loupe
IdentityServer3本身沒有任何日志配置脐恩,只需要按照上面的日志庫的要求配置托管程序就好。
診斷配置
LoggingOptions
類有下面的配置選項:
-
EnableWebApiDiagnostics
- 啟用后侦讨,Web Api內(nèi)部診斷信息會輸出到日志庫
-
WebApiDiagnosticsIsVerbose
- 啟用后驶冒,會輸出Web API的詳細(xì)(Verbose)診斷信息。
-
EnableHttpLogging
- 啟用后韵卤,HTTP請求和響應(yīng)信息會被輸出到日志
-
EnableKatanaLogging
- 啟用后骗污,Katana診斷信息會輸出到日志庫。(在調(diào)試第三方登陸時比較有用.)
例子: 使用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>
注意:使用這個方法需要托管程序有對日志文件的寫權(quán)限。如果沒有指定目錄月而,這個文件會生成在應(yīng)用程序根目錄汗洒。(生產(chǎn)環(huán)境不推薦這樣做),在生產(chǎn)環(huán)境需要把日志文件放在應(yīng)用程序目錄之外。
例子: 輸出到控制臺
輸出到控制臺可以讓我們零觸感即時了解IdentityServer內(nèi)部發(fā)生的事情父款。Serilog有一個漂亮的彩色的日志sink溢谤,叫做Serilog.Sinks.Literate
. 可以如下啟用:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.LiterateConsole()
.CreateLogger();
調(diào)試自己的代碼
我們也可以利用日志系統(tǒng)來記錄我們自己的擴(kuò)展代碼瞻凤。
在類里面增加一個ILog
實例,如下面的代碼:溯香。
private readonly static ILog Logger = LogProvider.For<MyClass>();
用這個實例記錄日志
Logger.Debug("Getting claims for identity token");
使用自己的日志基礎(chǔ)設(shè)施
你也許已經(jīng)有了一個日志框架鲫构,希望IdentityServer把日志輸出到那里面。
推薦的方式是玫坛,選擇一個日志庫(NLog, Log4Net etc.)结笨,給這個日志庫寫一個自定義Sink。(我們喜歡Serilog).
Serilog的例子請看這里.
請看這里 了解使用Serilog處理日志和事件.
阻止所有的日志輸出
(v2.5新增)
在某些場景里(比如:生產(chǎn)環(huán)境),我們不喜歡產(chǎn)生任何日志湿镀。這種情況下可以配置空(no-op)日志器 (在Startup
或者托管代碼里面):
LogProvider.SetCurrentLogProvider(new NoopLogProvider());