EnterpriseLibrary.Logging пишет журналы с разницей в 1 час - PullRequest
9 голосов
/ 11 апреля 2011

мы сталкиваемся со странной проблемой при ведении журнала. Для входа в наше веб-приложение мы используем библиотеку Microsoft.Practices.EnterpriseLibrary.Logging, и проблема в том, что она записывает журнал с разницей в 1 час от текущего системного времени.

Наш логгер основан на этой статье , и время в записи журнала никогда не устанавливается в коде нами. Каждая запись в журнале имеет заголовок, который выглядит следующим образом:

MainLogSource Information: 0 : Timestamp: 11/04/2011 10:15:32 поэтому эта временная метка всегда на 1 час раньше системного времени (например, эта запись появилась в 11:15).

Где может быть проблема? Спасибо

Ответы [ 5 ]

9 голосов
/ 11 апреля 2011

По умолчанию журналы Enterprise Library используют метку времени UTC, поэтому на них не влияет летнее время.

Вы можете изменить форматер в файле .config, чтобы использовать местное время (см. Прикрепленный вопрос), но помнитечто это приведет к дублированию записей при переходе на летнее время.

Enterprise Library 5.0 - Ведение журнала приложений - Неверный DateTime

5 голосов
/ 11 апреля 2011

Культурное незнание одной стороны сравнения?

Как в: регистратор записывает время в UTC, и вы сравниваете его с местным системным временем, и, случается, вы устанавливаете разницу в один час?Например, в Центральной Европе на 1 час больше времени UTC (полугодия).

Каковы ваши региональные настройки?Это довольно распространенное явление.В основном, чтобы быть сопоставимыми регистраторами и т. Д. ЛЮБИТЕ настройку в UTC, и вы тоже должны это делать.Я знаю компании, работающие с серверами в формате UTC, поэтому проще сравнивать журналы с системными часами (по цене, когда системные часы всегда выключены).

3 голосов
/ 11 апреля 2011

Это, вероятно, потому что EntLib по умолчанию записывает метки времени в UTC Вы можете изменить это см. Здесь

2 голосов
/ 30 сентября 2014

Установите свойство TimeStamp класса LogEntry в своем коде. Вы можете установить его по местному времени. Это будет отражаться в обоих местах: TimeStamp и ExtendedProperties. Как ниже:

    var newLog = new LogEntry(objException.Message, "General", 1, 1, TraceEventType.Error, "YourApp", null);
    newLog.TimeStamp = DateTime.Now;
1 голос
/ 11 апреля 2011

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

  • Часы, на которых запущено приложение, не были настроены на переход на летнее время.

  • При получении времени вы запрашиваете его как UTC, а не часовой пояс текущего языка.

...