1

Microsoft Enterprise Library Logging Application Block を使用して例外を記録しています。データベース トレース リスナーを使用しています。

デフォルトでは、ログ エントリのタイムスタンプは UTC 時間です。

次のようにログ フォーマッタを設定することで、「ログ」テーブルの「FormattedMessage」列に現地時間のタイムスタンプを表示できることがわかっています。タイムスタンプ: {timestamp(local)}

「タイムスタンプ」列で同じことを行うにはどうすればよいですか?

ありがとうございました。

4

1 に答える 1

2

必要なことを行う最も簡単な方法は、 の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 タイムスタンプを操作することができます。

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 に固執することをお勧めします。

于 2011-10-12T04:18:20.227 に答える