Функция журнала вызывает значения параметров и возвращает значения в c # - PullRequest
1 голос
/ 13 сентября 2011

Скажем, у меня есть класс, который выглядит следующим образом.

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 ]

3 голосов
/ 13 сентября 2011

Насколько мне известно, единственный способ добиться этого - через аспектно-ориентированное программирование с такой библиотекой, как PostSharp .

2 голосов
/ 13 сентября 2011

Вы можете использовать такой инструмент, как PostSharp , чтобы создать аспект ведения журнала.

0 голосов
/ 13 сентября 2011

Единственный способ, которым это возможно, - переписать сгенерированный / скомпилированный код IL для всех классов, имеющих атрибут [Log].Для этого вам нужно написать инструмент, который анализирует и манипулирует вашим кодом и регистрирует его как «Событие после сборки» (в 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;
}
...