Блокировка приложения - регистрация звонящего
При входе в систему с помощью 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 ответа
Добавьте вызывающий метод в словарь 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
Мы не нашли легкий путь без использования StackTrace. Если это исключение, мы просто воспользуемся этим:
StackTrace trace = new StackTrace(ex, true);
StackFrame frame = trace.GetFrame(0);
Для болтливых предметов мы просто пишем строку. У нас есть фрагмент, который может захватить имя класса при вставке. Мы также объявляем константную строку с именем класса.
Не красиво, но это лучшее, что мы нашли. Я надеюсь, что у кого-то еще есть ответ на этот вопрос в этой теме:)