在 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]);
}