Блокировка приложения Logging - регистрация звонящего - PullRequest
2 голосов
/ 19 сентября 2008

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

<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />

И это дает мне вывод, который я хочу:

2008-09-19 15:40:26,906 [3132] ERROR <b>Log4NetTechDemo.Tester</b> [(null)] - Failed method

Из результатов видно, что класс, вызвавший журнал, - это Log4NetTechDemo.Tester, поэтому я могу довольно легко отследить ошибку до этого класса.

В блоке приложения регистрации я не могу понять, как сделать это с помощью простого вызова журнала. Кто-нибудь знает, как это можно сделать? Если это так, пример или шаги для этого были бы очень полезны.

Ответы [ 2 ]

5 голосов
/ 19 сентября 2008

Добавьте вызывающий метод в словарь ExtendedProperties LogEntry; конечно, если вы не удалили токены ExtendedProperties из шаблона форматера.

Поместите что-то вроде этого в оболочку регистрации:

public void LogSomething(string msg)
{
  LogEntry le = new LogEntry { Message = msg };
  le.ExtendedProperties.Add("Called from", new StackFrame(1).GetMethod().ReflectedType);
  Logger.Write(le);
}

Вызов этого производит в конце журнала что-то вроде этого:

Extended Properties: Called from - LAB_Demo.Tester
1 голос
/ 19 сентября 2008

Мы не нашли простой способ без использования StackTrace. Если это исключение, мы просто возьмемся за это:

 StackTrace trace = new StackTrace(ex, true);
 StackFrame frame = trace.GetFrame(0);

Для болтливых предметов мы просто пишем строку. У нас есть фрагмент, который может захватить имя класса при вставке. Мы также объявляем строку const с именем класса.

Не красиво, но это лучшее, что мы нашли. Я надеюсь, что у кого-то еще есть ответ на этот вопрос в этой теме:)

...