2011-09-12 96 views
1

說我有一個類似這樣的類。日誌函數調用c中的參數值和返回值#

public static class Config 
{ 
    public static string GetAppSetting(string key) 
    { 
     return ConfigurationManager.AppSettings[key].ToString(); 
    } 
} 

,我想每次調用此方法的關鍵參數&返回值一起記錄。

的唯一代碼的變化我想提出的是這樣的:

[Log] 
public static class Config 
{ 
    public static string GetAppSetting(string key) 
    { 
     return ConfigurationManager.AppSettings[key].ToString(); 
    } 
} 

我將最有可能使用log4net的記錄從日誌屬性的調用。這怎麼能實現?

在此先感謝!

+0

這可能重複好一:http://stackoverflow.com/questions/4133569/how-to-log-method-calls-on-targets-marked-with-an-attribute –

回答

2

您可以使用像PostSharp這樣的工具來創建日誌記錄方面。

3

據我所知,你可以做到這一點的唯一途徑是通過與作爲PostSharp這樣的庫面向方面的編程。

0

這也許是可能的唯一方法是重寫爲具有[Log]屬性的所有類所生成/編譯IL代碼。爲此,您需要編寫一個工具來分析和操作代碼,並將其註冊爲「Post build event」(在Visual Studio中 - > Project settings)。

對於這樣的單聲道塞西爾工作可能是一個很大的幫助:http://www.mono-project.com/Cecil

但大多數propably您的重寫代碼,改變方法簽名的東西像

public static string GetAppSetting(string key) 
{ 
    var result = ConfigurationManager.AppSettings[key].ToString(); 

    Trace.TraceInformation(String.Format("Config.GetAppSetting - Key: {0}, Result: {1}", key, result)); 

    return result; 
}