在日志条目中表示持续时间的最佳方式

时间:2012-02-16 20:21:46

标签: c# logging timespan

我正在编写一个简单的通用记录器类,它知道正在记录的任务的开始和结束时间。

在英语中,您更愿意看到代表在不同时间内完成任务所需的时间?

我目前有,

Log("Finished in {0}ms, {1}s, {2}m.", ts.TotalMilliseconds, ts.TotalSeconds, ts.TotalMinutes);

哪个输出,

2012-02-16 @ 20:12:33:2007.7125ms完成,2.0078125s,0.0334635416666667m。

您可能建议采用哪种更好的方式?

干杯, P上。

感谢Xeno,最终代码为:

Log(string.Concat("Finished in ", (ts.Hours > 0 ? ts.Hours + "h " : string.Empty),
                                    (ts.Minutes > 0 ? ts.Minutes + "m " : string.Empty),
                                    (ts.Seconds > 0 ? ts.Seconds + "s " : string.Empty),
                                    (ts.Milliseconds > 0 ? ts.Milliseconds + "ms " : string.Empty),
                                    ("(" + ts.TotalMilliseconds.ToString("0.000") + ")")));

5 个答案:

答案 0 :(得分:3)

怎么样:

0h 0m 2s 7.815ms

由于它是一个通用的Logger,这是一般性的建议

最好的方法是为用户提供一种在配置文件中定义它的方法,或至少在初始化时以编程方式定义

答案 1 :(得分:2)

我个人偏好使用一些标准。因为它们是标准的,以后可以轻松解析。

例如,HTTP/1.1 Date/Time format产生以下任何格式。

  Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, updated by RFC 1123
  Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
  Sun Nov  6 08:49:37 1994       ; ANSI C's asctime() format

除此之外,最好存储 Unix时间戳。它总是很方便。

最后将持续时间以毫秒为单位。如果你有几毫秒,你可以将它转换为任何其他更高的单位。但是,如果您希望其他人阅读它,请将其置于HH:MM:SS.fff或类似格式。这种格式更容易理解。

答案 2 :(得分:1)

您也可以简单地将开始和结束时间记录到最高精度,这可能是最灵活或最准确的表示。

答案 3 :(得分:0)

这一切都取决于背景。如果您的进程通常运行几分钟,则毫秒无关紧要。如果你有一些在几秒钟内运行的东西,毫秒可能是相关的。如果它低于1秒,绝对是毫秒或微米。

答案 4 :(得分:0)

如果它会在几毫秒到几小时之间变化,那么我会坚持使用一致且熟悉的符号:

HH:mm:ss.fff