Enterprise Library 4.1 метка времени записи, как отображать миллисекунды - PullRequest
9 голосов
/ 01 июня 2011

В конфигурационном файле указано следующее.

 <formatters>
      <add template="{timestamp} {severity} {category} {message}" type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        name="SingleLineFormatter" />
 </formatters>

, который отображает

31.05.2011 11:43:24 Информация ...

Но нет отображаемой миллисекунды, которая была бы полезна для перфорирования, кто-нибудь знает, как отобразить? Спасибо.

Ответы [ 2 ]

18 голосов
/ 02 июня 2011

Вы можете указать Стандарт или Пользовательский DateTime Формат строки в маркер шаблона метки времени:

<formatters>
      <add 
        template="{timestamp(MM/dd/yyyy HH:mm:ss.fffffff)} {severity} {category} {message}" 
        type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        name="SingleLineFormatter" />
 </formatters>

Это приведет к выводучто-то вроде:

06/01/2011 20: 12: 43.3405776 Информация Общая информация Это сообщение

По умолчанию DateTime будет в UTC времени.Если вы хотите использовать местное время, тогда префикс строки формата с «local:».Например, {timestamp(local:MM/dd/yyyy HH:mm:ss.fffffff)}

Кроме того, если вы хотите регистрировать трассировку производительности записей и выходов методов, вы можете обратиться к классу Tracer.

4 голосов
/ 19 марта 2012

К сожалению, при ведении журнала в корпоративной библиотеке используется .net DateTime, поэтому, хотя регистрация в миллисекундах возможна, как описано в @Tuzo, в лучшем случае она бессмысленна, а в худшем - вводит в заблуждение.

Эрик Липперт написал интересное объяснение этого: https://stackoverflow.com/a/2143784/230428

Точность любого значения будет в лучшем случае плюс или минус 50 мс (хотя это варьируется от машины к машине - еще одна причина неопираясь на это).Это потому, что дата и время были предназначены для ответа на вопрос "Что такое дата и время?"а не вопрос «Сколько времени это заняло?».Для последнего используйте класс Секундомер.

Очевидно, что удобство наличия каркаса для ведения журнала и записи времени может показаться заманчивым, но вы не должны полагаться на него ни на что, кроме времени второй точности.

IВпервые это произошло, когда мои журналы MVC OnActionExecuting и OnActionExecuted возвращались в одно и то же время в микросекунды.Очень впечатляет и одинаково неправильно.

...