Ведение журнала корпоративной библиотеки: как напечатать имя метода и номер строки с каждой записью журнала. - PullRequest
1 голос
/ 30 октября 2011

Есть ли заранее определенный способ сделать это или нам нужно определить наш собственный пользовательский форматер?

Ответы [ 2 ]

3 голосов
/ 12 мая 2013

Вы не говорите, какую версию EntLib вы используете, но учитывая дату вашего поста, я приму EntLib 5.0.

Интересующая вас часть строки формата:

Extended Properties: {dictionary({key} - {value}{newline})}

Это часть общего шаблона форматирования «по умолчанию», найденного в вашем конфигурационном файле, как показано ниже:

    <formatters>
        <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" template="Timestamp: {timestamp}{newline}&#xA;Message: {message}{newline}&#xA;Category: {category}{newline}&#xA;Priority: {priority}{newline}&#xA;EventId: {eventid}{newline}&#xA;Severity: {severity}{newline}&#xA;Title:{title}{newline}&#xA;Machine: {localMachine}{newline}&#xA;App Domain: {localAppDomain}{newline}&#xA;ProcessId: {localProcessId}{newline}&#xA;Process Name: {localProcessName}{newline}&#xA;Thread Name: {threadName}{newline}&#xA;Win32 ThreadId:{win32ThreadId}{newline}&#xA;Extended Properties: {dictionary({key} - {value}{newline})}" name="Text Formatter" />
  </formatters>

Таким образом, вы можете видеть, что Extended Properties - это словарь, который будет автоматически повторяться Logger при создании записи журнала. Его цель - предоставить быстрый и грязный способ выгрузки дополнительного вывода, который может предоставить ваше приложение. Более полным способом было бы написать собственный форматировщик, в котором бы содержались токены для каждого из объектов, которые вы в противном случае добавили бы в Расширенные свойства.

Чтобы получить свойства в эту коллекцию, просто используйте соответствующую перегрузку

LogWriter.Write(..)

метод при внесении записи. У некоторых из них есть

IDictionary(key, string) properties

параметр, который можно использовать для предоставления этих значений.

Что касается номера строки и имени метода, их можно просто вставить в словарь, который вы предоставили выше. Получить их значения можно просто:

   private void FillExtraLogInfo(IDictionary<string, object> info)
    {
        StackFrame stackFrame = new StackFrame(1, true);
        info.Add("Method Name", stackFrame.GetMethod().ToString());
        info.Add("Line Number" stackFrame.GetFileLineNumber());
    }
0 голосов
/ 07 ноября 2011

Вы можете получить имя метода, настроив ваш TextFormatter в файле конфигурации. Я включил весь форматировщик, чтобы дать вам некоторый контекст, но главное, на что нужно обратить внимание, это {свойство (MethodName)} в атрибуте шаблона. Я не уверен, как получить номер строки.

<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
    <formatters>
        <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
        template="Timestamp: {timestamp}{newline}&#xA;Title: {title}{newline}&#xA;Message: {message}{newline}&#xA;Category: {category}{newline}&#xA;Priority: {priority}{newline}&#xA;EventId: {eventid}{newline}&#xA;Severity: {severity}{newline}&#xA;Machine: {localMachine}{newline}&#xA;App Domain: {localAppDomain}{newline}&#xA;ProcessId: {localProcessId}{newline}&#xA;Process Name: {localProcessName}{newline}&#xA;Thread Name: {threadName}{newline}&#xA;Win32 ThreadId:{win32ThreadId}{newline}&#xA;Extended Properties: {dictionary({key} - {value}{newline})}&#xA;Type: {property(TypeName)}{newline}&#xA;Method: {property(MethodName)}{newline}&#xA;Parameters: {dictionary({key} : {value};)}{newline}&#xA;Return Value: {property(ReturnValue)}{newline}&#xA;Call Time: {property(CallTime)}{newline}" 
        name="Detailed Text Formatter" />
    </formatters>
</loggingConfiguration>

В статье MSDN о Настройка средств форматирования упоминаются эти специальные токены, но, к сожалению, не объясняется, как их очень хорошо использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...