2015-11-06 45 views
0

希望我能很好的解釋我的問題。asp.net logger userinfo per web request

我有一個web應用程序,它與桌面應用程序共享一個域圖層。您可以將應用程序作爲網站或桌面應用程序,但域邏輯相同,因此都共享該代碼段。

我想記錄域圖層,我想知道用戶做了什麼,桌面應用程序很簡單,我可以使用靜態記錄器和用戶信息,因爲我只有一個用戶登錄,但是在網絡應用程序中,我可以同時使用很多,所以我不能使用相同的方法。

我想避免在域層的每次調用中傳遞用戶信息。

感謝

回答

0

嗯,最後我發現的形式給出了這個問題的唯一方法是使用一個輔助/經理以「ThreadStatic」成員,這將是每個線程不同,因爲每個併發的WebRequest將與管理一個不同的線程。我可以在開始時分配logget,稍後在代碼中使用它。 希望有人能找到更好的解決方案。

public static class LoggerHelper 
{ 
    [ThreadStatic] 
    static public ILogger _logger; 
    static public ILogger Logger 
    { 
     get { return _logger; } 
     set { _logger = value; } 
    } 
} 

在Web服務:

public bool TestLogger() 
{ 
//initialize logger. 
AmfContext.Logger = _logger = new WebLogger(); 
//call internal logic 
............. 
} 

在代碼:

LoggerHelper.Logger.Info("Log line example");