在 ServiceStack 中使用本地时间作为 StackTrace 时间戳
Use Local Time for StackTrace timestamp in ServiceStack
在服务堆栈响应中的 ResponseStatus 对象的堆栈跟踪 属性 中,有一个时间戳如下:
"StackTrace": [GetEmployee: 8/12/2015 9:09:35 PM]
但是,时间戳是 UTC 时间。我是否可以将 servicestack 配置为始终 return 服务器(或本地)时间而不是 UTC 来处理堆栈跟踪错误?
ServiceStack 一致性使用 DateTime.UtcNow
来提高整个代码库的性能和一致性。您不能直接更改 DateTime.UtcNow
的硬编码用法,但您可以将 AppHost 中的 OnExceptionTypeFilter 覆盖为 modify/decorate 返回的 ResponseStatus
,这将让您替换现有的DateTime 到 DateTime.Now
类似:
public override void OnExceptionTypeFilter(
Exception ex, ResponseStatus responseStatus)
{
base.OnExceptionTypeFilter(ex, responseStatus);
var parts = (responseStatus.StackTrace ?? "").SplitOnFirst(']');
if (parts.Length != 2) return;
var requestName = parts[0].Substring(1).SplitOnFirst(':')[0];
responseStatus.StackTrace = "[{0}: {1}]{2}".Fmt(
requestName, DateTime.Now, parts[1]);
}
在服务堆栈响应中的 ResponseStatus 对象的堆栈跟踪 属性 中,有一个时间戳如下:
"StackTrace": [GetEmployee: 8/12/2015 9:09:35 PM]
但是,时间戳是 UTC 时间。我是否可以将 servicestack 配置为始终 return 服务器(或本地)时间而不是 UTC 来处理堆栈跟踪错误?
ServiceStack 一致性使用 DateTime.UtcNow
来提高整个代码库的性能和一致性。您不能直接更改 DateTime.UtcNow
的硬编码用法,但您可以将 AppHost 中的 OnExceptionTypeFilter 覆盖为 modify/decorate 返回的 ResponseStatus
,这将让您替换现有的DateTime 到 DateTime.Now
类似:
public override void OnExceptionTypeFilter(
Exception ex, ResponseStatus responseStatus)
{
base.OnExceptionTypeFilter(ex, responseStatus);
var parts = (responseStatus.StackTrace ?? "").SplitOnFirst(']');
if (parts.Length != 2) return;
var requestName = parts[0].Substring(1).SplitOnFirst(':')[0];
responseStatus.StackTrace = "[{0}: {1}]{2}".Fmt(
requestName, DateTime.Now, parts[1]);
}