NSLog()使用毫秒级分辨率的时间戳,但是它是一个钝器,因为它的所有日志消息都处于警告级别。
Apple System Log是一个更细粒度的系统,有8个不同的级别。但是......它的时间戳只有1秒的分辨率。我阅读了关于时间格式的手册页,但它们似乎都只是第二种。
显然,这些信息是可用的,至少对NSLog来说是这样。很多事情可以在一秒钟内继续下去;有没有办法通过ASL获得更好的分辨率?
答案 0 :(得分:0)
您可以将".#"
附加到ASL(和syslog)中的时间格式以指定精度。因此"utc.3"
将以UTC格式格式化,以毫秒为单位。您可以将其添加到msg_fmt
或time_fmt
参数。
时间格式精度似乎仅记录在syslogd(1)中。我不确定为什么它没有成为asl(3)。
例如,使用asl_add_output_file
并在time_fmt
中指定可能如下所示:
// setup, do once!
aslclient log = asl_open(NULL, NULL, 0);
asl_add_output_file(log, STDERR_FILENO,
"$Time $((Level)(str)) - $Message", // $Time here uses time_fmt arg on next line
ASL_TIME_FMT_UTC ".3", // time_fmt: append ".3" for milliseconds here
ASL_FILTER_MASK_UPTO(ASL_LEVEL_DEBUG), ASL_ENCODE_SAFE);
// example log
asl_log(log, NULL, ASL_LEVEL_INFO, "Hello");
// Note in the above ASL_TIME_FMT_UTC is #defined to "utc", so the we're
// using compile-time string concatenation of "utc" ".3" to "utc.3".
// Alternately you can just specify "utc.3" directly.
并输出:
2016-02-01 19:16:39.561Z Info - Hello
在msg_fmt
的{{1}}参数中指定可能如下所示:
asl_add_output_file
并输出:
// setup, do once!
aslclient log = asl_open(NULL, NULL, 0);
asl_add_output_file(log, STDERR_FILENO,
// in msg_fmt below, use ISO8601 + ".6" for microseconds
"$((Time)(ISO8601.6)) $((Level)(str)) - $Message",
ASL_TIME_FMT_UTC,
ASL_FILTER_MASK_UPTO(ASL_LEVEL_DEBUG), ASL_ENCODE_SAFE);
// example log
asl_log(log, NULL, ASL_LEVEL_INFO, "Hello");
(我要提醒的是,上面的代码片段仅用于演示在ASL中指定时间格式精度。实际使用情况可能需要2016-02-01T14:16:39.562030-05 Info - Hello
进行设置,使用串行调度队列进行日志记录。)< / p>
答案 1 :(得分:0)
使用 ts shell 命令向任何日志添加毫秒。
idevicesyslog | ts '[%Y-%m-%d %H:%M:%.S]'