2012-10-22 32 views
0

我正在開發基於休息的API。對於API的每個請求,我都希望記錄有關該特定請求的大量信息,例如請求的人,請求的資源,跟蹤此客戶請求此資源的次數,他提供的信息是什麼感興趣等等。在不影響性能的情況下廣泛記錄傳入的API請求

如何在不影響每個請求的響應時間的情況下做到這一點?我的想法是將所有這些日誌信息寫入緩存並將緩存過期時間設置爲5分鐘。然後這5分鐘內的所有傳入請求將被寫入相同的緩存對象。當緩存過期時(可以在發生時進行回調),我將它寫入數據庫。

你看到這種方法的缺點嗎?你有更好的建議嗎?

PS!使用內置的IIS日誌功能不是一個選項,因爲它不夠具體。

更新: 我在這裏實際問的是,如果有任何知名的問題在CacheItemRemoved回調中進行數據庫訪問?這是一個壞主意嗎?

+1

您是否想過以異步方式編寫它?使用工作線程執行此操作。 –

+0

是的,這是我第一次想到的,但是我在某處讀到,從asp.net產生工作線程並不是一個好主意。但也許這是不正確的? – rgullhaug

+0

如果您將使用asp.net線程或者如果您的日誌記錄將導致分配池結束,則可能會出現問題。但順便說一下,如果你登錄請求線程,你的日誌會影響性能嗎?你衡量了性能打擊嗎? –

回答

1

異步寫作絕對是一種方式。您提出的解決方案很複雜,效率不高。如果你不關心,以書面形式向您的日誌,做最簡單的事情將是火了一個日誌任務,如:

Task.Run(() => logger.Log("stuff")); 

如果順序的問題,您也可以考慮使用ActionBlock。在相關的SO問題中查看Stephen Cleary's example

+0

謝謝你的回答。我會考慮這個。在Order中編寫日誌很重要,所以我將不得不使用ActionBlock。所以在asp.net中創建新的線程沒有問題?我在某處讀到你應該避免這種情況。但是,如果你使用ThreadPool,它可能只是一個問題?爲什麼你的意思是我的解決方案效率不高? – rgullhaug

相關問題