1. 程式人生 > >談談Nancy中讓人又愛又恨的Diagnostics【上篇】

談談Nancy中讓人又愛又恨的Diagnostics【上篇】

base isa 但是 get sting erro for 就會 一次

原文:談談Nancy中讓人又愛又恨的Diagnostics【上篇】

前言

在Nancy中有個十分不錯的功能-Diagnostics,可以說這個功能讓人又愛又恨。

或許我們都做過下面這樣的一些嘗試:

  • 記錄某一個功能用到的相關技術信息

  • 記錄下網站的訪問記錄

  • 全局配置某些框架內部功能的開關

  • .....

當然,對於上面提到的這些東西,現在都有非常成熟的解決方案可以用。

不過,Nancy在內部也實現了這樣的一個機制,可以讓我們比較方便的處理這些問題。

下面我們先來看看具體是如何使用的!本文也是著重於如何使用。

如何使用

由於在Nancy1.x與2.x中的差別,在使用Diagnostics的用法上也有了略微較大的差別。

截至在本文編寫之前(2017-06-26),Nancy在GITHUB上面的相關介紹還是基於1.x的。而本文是用2.0作為例子演示的,當然也有與1.x的簡單對比。

在2.0中,Diagnostics的啟用是通過在Bootstrapper中的Configure方法啟用,而在1.x中是通過重寫一個DiagnosticsConfiguration類型的屬性來啟用。

下面是兩個大版本之間的使用方法:

2.0的使用如下:

public override void Configure(INancyEnvironment environment)
{
    environment.Diagnostics(password: "123");
    base.Configure(environment);
}

1.x的使用如下:

protected override DiagnosticsConfiguration DiagnosticsConfiguration
{
    get { return new DiagnosticsConfiguration { Password = "123"}; }
}

其中,2.0中的寫法是通過INancyEnvironment的一個擴展方法來實現的。

當我們只指定密碼的時候,就表示我們要開啟這個功能了。其本質就是在當前的environment中添加Diagnostics的相關配置。

需要註意的是,我們指定的密碼不能為空!如果為空就會提示Diagnostics的配置不正確。

相比1.x,個人覺得2.0的寫法應該是更推薦的寫法,因為 Diagnostics在Nancy中是一個功能模塊,並且是由用戶去決定是否去啟用的,所以在Bootstrapper這樣一個啟動器中為一個功能模塊單獨設計一個屬性來標識是否啟用,感覺有那麽一點累贅,如果這樣的屬性一多,就會造成Bootstrapper比較臃腫,而在配置方法中去統一管理這些配置項會簡潔許多。這樣的做法就有點類似ASP.NET Core中Startup類的Configure方法。比較符合按需加載的特性。

在啟用這個功能之後,我們可以通過訪問默認地址 http://yourdomain.com/_Nancy 去訪問相關的功能。當第一次打開的時候會進入一個登錄頁面。

技術分享圖片

在文本框中輸入我們設置的密碼後就可以進入到Diagnostics的主面板了。

技術分享圖片

通過主面板上面的信息,我們可以看到有下面4個主要內容:Information、Interactive Diagnostics、Request Tracing和Settings

下面分別來看看這些內容:

Information

Information主要是記錄了當前站點使用Nancy的相關配置信息:

技術分享圖片

這裏主要包含兩個部分的信息,第一部分是Nancy的相關信息,第二部分是配置的相關信息。

在第一部分中,可以看到當前用的Nancy版本是2.0,根路徑、視圖引擎等信息。我們這裏用的Hosting是Kestrel

這裏沒有正確的加載出來,裏面應該是有些問題細節還沒有處理好的。

在第二部分中,就是當前站點使用的一些配置信息,由於並沒有重寫相關的配置,所以可以看到清一色的Default.

Interactive Diagnostics

這裏在默認的情況下也是有兩個模塊,一個是緩存的路由信息,一個是測試相關的Provider。

技術分享圖片

這裏主要看一下路由的信息。

技術分享圖片

如果看過我下面這篇博客,對怎麽取到這些路由信息的,就會比較清楚。

淺析如何在Nancy中生成API文檔

下面還有Finalize和MemberwiseClone這兩個方法,可以按照字面上的意思去理解,不過似乎並沒有發現什麽實際性的作用,所以這裏就不深入說明了。

Request Tracing

默認情況下,Request Tracing 是沒有開啟的,所以這個時候打開這個部分只能看到No Sessions found

技術分享圖片

想要開啟Tracing,同樣是在Bootstrapper的Configure方法中開啟。

public override void Configure(INancyEnvironment environment)
{
    environment.Diagnostics(password:"123");            

    environment.Tracing(enabled: true, displayErrorTraces: true);

    base.Configure(environment);       
}

當開啟之後,再打開這個頁面時,

就可以看到Trace了一個會話

技術分享圖片

點進去可以看到這個session更多詳細的信息:

左邊列出了每一個請求的精簡信息,右邊是詳細的信息。

技術分享圖片

註:對於Request Tracing,Nancy限制了最多只能存儲500個會話,每個會話只能存儲50個請求。內部是通過維護一個線程安全的隊列來處理的,每當其超過上限時,就會進行出隊操作,將最先記錄的移出隊列。所以在這裏,我們能看到的永遠是最新的會話和最新的請求。

Settings

Setting這裏讀取的是StaticConfiguration的內容。就2.0來說,個人暫時沒有發現 這一個板塊的內容有太大的作用。

在2.0中,默認情況下我們能看到的東西就一個!原因很簡單,2.0中的大部分配置項已經沒有使用StaticConfiguration這個靜態類來設置了。

技術分享圖片

同時也回顧對比一下1.x中的setting頁面,對比一下兩者的默認配置項:

技術分享圖片

可以看到1.x配置項比2.0多了不少!在1.x中設置可以直接影響站點的相關配置。例如:選中Disable Error Traces,那麽站點就會禁用掉Error Traces。

這裏可以說是功能開關。

自定義配置

上面的示例中,我們是通過默認地址 http://yourdomain.com/_Nancy 去訪問的,

如果說,我們開啟了這個功能,但是什麽配置都沒有改,就會有可能讓其他人看到我們站點的大部分信息。所以正常情況下,都是不會用這個默認地址的,畢竟這是在Nancy內部設置的一個默認地址。我們通過上面提到的Diagnostics這個擴展方法來替換我們的默認路徑。

public override void Configure(INancyEnvironment environment)
{
    environment.Diagnostics(
        password:"123",
        path:"_dash"//設置為http://yourdomain.com/_dash                
        );            

    environment.Tracing(enabled: true, displayErrorTraces: true);

    base.Configure(environment);       
}

此時再一次訪問 http://yourdomain.com/_Nancy 就會提示404了(前提是沒有其他的請求指向這個地址)。

技術分享圖片

只有輸入我們設置的地址才能正常訪問!後續的操作就和上面介紹的一樣了。

技術分享圖片

另外,我們能配置的除了密碼,和訪問地址外,還可以設置控制面板的過期時間以及相關的加密配置。

更多使用方法可以參考下面的鏈接:

https://github.com/NancyFx/Nancy/wiki/Diagnostics

總結

本文簡單的介紹了如何使用Nancy的Diagnostics功能,如果真的使用這個功能,可能下面的2個情況需要註意一下:

  • 密碼盡可能要設置的復雜一點
  • 最好能修改默認的訪問路徑

為什麽說這個Diagnostics讓人又愛又恨呢?這個功能可以說是十分強大,也可以說是並沒有什麽作用。當然這也主要是取決於怎麽用。

對於一個Web框架來說,考慮到的東西比較齊全、比較深入,對我們開發者來說是十分值得借鑒的。在此同時,給我們的日常維護也帶來了便利之處。

這裏的一系列功能是沒有持久化的,我們可以在這裏的基礎上對他進行持久化,這樣就可以強化這一個功能。

如果說一個公司有強大的服務器團隊,那麽這個功能就可能會變得沒有太大的展示空間。畢竟人家會有一套更專業的東西去管理,監控網站的相關信息,而且記錄的內容,信息也會比Diagnostics多上N個等級。

在下一篇將會詳細介紹這個功能的實現。

本文已經同步到Nancy之大雜燴

談談Nancy中讓人又愛又恨的Diagnostics【上篇】