Блок приложения регистрации — регистрация вызывающего абонента
-
01-07-2019 - |
Вопрос
При входе в систему с помощью 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, поэтому я могу довольно легко отследить ошибку до этого класса.
В блоке приложения ведения журнала я не могу понять, как это сделать с помощью простого вызова журнала.Кто-нибудь знает, как это можно сделать?Если да, то пример или шаги для этого были бы очень полезны.
Решение
Добавьте вызывающий метод в словарь 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);
Для болтливых элементов мы просто пишем строку.У нас есть фрагмент, который может получить имя класса при вставке.Мы также объявляем константную строку с именем класса.
Некрасиво, но это лучшее, что мы нашли.Я надеюсь, что кто-то еще найдет лучший ответ в этой теме :)