假设我有一个看起来像这样的课程。
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来记录来自Log属性的调用。如何实现这一目标?
提前致谢!
答案 0 :(得分:3)
据我所知,实现这一目标的唯一方法是通过面向方面编程,使用PostSharp等库。
答案 1 :(得分:2)
您可以使用PostSharp之类的工具来创建日志记录方面。
答案 2 :(得分:0)
唯一可能的方法是为具有[Log]
属性的所有类重写生成/编译的IL代码。为此,您需要编写一个分析和操作代码的工具,并将其注册为“Post build事件”(在Visual Studio中 - >项目设置)。
对于像这样的工作,Mono Cecil可能是一个很好的帮助:http://www.mono-project.com/Cecil
但最重要的是,你可以更好地重写代码并将方法签名更改为
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;
}