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