日志功能调用参数值&在c#中返回值

时间:2011-09-12 20:43:09

标签: c# reflection custom-attributes

假设我有一个看起来像这样的课程。

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属性的调用。如何实现这一目标?

提前致谢!

3 个答案:

答案 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;
}