Блок приложения ведения журнала: временная метка слушателя трассировки базы данных

Я регистрирую исключение с помощью блока приложения Microsoft Enterprise Library Logging. Я использую прослушиватель трассировки базы данных.

Временная метка записи журнала по умолчанию указывается в формате UTC.

Я знаю, что могу иметь временную метку местного времени в столбце "FormattedMessage" таблицы "Журнал", установив форматер журнала следующим образом: Timestamp: {timestamp(local)}

Как я могу сделать то же самое с колонкой Timestamp?

Спасибо.

1 ответ

Решение

Самый простой способ сделать то, что вы хотите, это установить Timestamp собственность LogEntry,

Например:

LogEntry le = new LogEntry()
{
    Message = "Log it",
    TimeStamp = DateTime.Now // use local time
};

le.Categories.Add("General");

Logger.Write(le);

Другие варианты сделать то, что вы хотите, это создать пользовательский прослушиватель трассировки или изменить WriteLog хранимая процедура, чтобы использовать любое значение, которое вы хотите. Вы могли бы просто использовать GETDATE() или вы можете сделать некоторые манипуляции переданной в UTC Timestamp:

DATEADD(HOUR, DATEDIFF(HOUR, GETUTCDATE(), GETDATE()), timestamp) 

Интересно (поскольку вы обычно не используете этот тип кода), если вы используете метод Write() FormattedDatabaseTraceListener непосредственно он использует локальный DateTime. Например:

var dbWriter = new FormattedDatabaseTraceListener(
    EnterpriseLibraryContainer.Current.GetInstance<Database>(),
    "writeLog", "AddCategory", new TextFormatter());

dbWriter.Write("Log this!", "General");

Но, как написал комментатор, я бы рекомендовал придерживаться UTC.

Другие вопросы по тегам