log4net когда войти? - PullRequest
       5

log4net когда войти?

3 голосов
/ 11 мая 2009

Есть ли у кого-нибудь полезная информация о том, когда регистрироваться, я думал о регистрации типа INFO при вводе каждого метода c # и записи другой информации при выходе ..

Это считается хорошим или плохим? Увижу ли я производительность?

Если я записываю ИНФО при вводе метода, идея заключается в том, чтобы записать имя метода, а также все переменные и значения

Любая идея, как это можно сделать автоматически без ввода каждого значения и имени метода, я полагаю, что я мог бы использовать отражение, но, возможно, я бы увидел здесь замедление?

Если бы отражение замедлило ход событий, возможно, я мог бы просто использовать бит "REFLECTION", когда там есть программа FAILS, поэтому я могу записать трассировку стека, все переменные и значения.

Любые идеи или примеры по этому поводу очень ценятся

Спасибо

Ответы [ 3 ]

6 голосов
/ 11 мая 2009

Вы можете использовать стиль ведения журнала AOP (Аспектно-ориентированное программирование) для ведения журнала на уровне метода.

Существует хороший фреймворк под названием Log4PostSharp . Это плагин для PostSharp, который пишет в Log4Net

В основном все сводится к украшению вашего метода таким атрибутом:

[Log(LogLevel.Info, "Doing something")]
public void CountCharacters() {
   // do your logic here
}
2 голосов
/ 11 мая 2009

Я бы использовал для этого еще более низкий уровень - TRACE (если он доступен в log4net). DEBUG хорош для регистрации особых случаев чего-либо, в то время как TRACE лучше использовать для вывода вызовов методов, параметров и тому подобного. Определенно не INFO, который больше подходит для регистрации функциональных вещей на более высоком уровне.

1 голос
/ 11 мая 2009

Я бы использовал DEBUG, а не INFO, и зарезервировал бы INFO для вещей, которые вы хотели бы запустить в производство. Но это только мои предпочтения.

Будет хит производительности. Файл журнала должен быть записан, и любой ввод-вывод является проблемой производительности.

Я лично использую рефлексию для подобных вещей, но опять же это повлияет на производительность. Возможно, вы захотите реализовать все это с помощью метода отражения, который берет предыдущий элемент в стеке и создает из него описание. Тогда вы можете позвонить из любой точки.

Как только вы это сделаете, вы можете запустить профилировщик и оптимизировать места, которые действительно вызывают проблемы с производительностью.

Вот как я это делаю для PropertyChanged. (Помните, производительность ударил)

    public string Name
    {
        get { return _Name ?? string.Empty; }
        set
        {
            _Name = value;
            NotifyPropertyChange(MethodBase.GetCurrentMethod());
        }
    }

    private void NotifyPropertyChange(MemberInfo info)
    {
        NotifyPropertyChange(info.Name.Replace("set_", string.Empty));
    }

    private void NotifyPropertyChange(string property)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(property));
    }
...