2008-09-19 2 views
2

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

<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 я не могу понять, как это сделать с помощью простого вызова журнала. Кто-нибудь знает, как это можно сделать? Если это так, то пример или шаги для этого были бы очень полезными.

ответ

5

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

Put что-то подобное в лесозаготовительной обертке:

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

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

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

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

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

Смежные вопросы