2011-09-12 2 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

возможным дубликатом этого one: http://stackoverflow.com/questions/4133569/how-to-log-method-calls-on-targets-marked-with-an-attribute –

ответ

2

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

3

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

0

Единственный способ, которым это может быть возможно, - это переписать сгенерированный/скомпилированный IL-код для всех классов, имеющих атрибут [Log]. Для этого вам нужно написать инструмент, который анализирует и обрабатывает ваш код и регистрирует его как событие «Post build» (в Visual Studio -> Настройки проекта).

Для работы, как этот Mono Cecil может быть большая помощь: 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; 
} 
Смежные вопросы