2014-09-11 2 views
6

NSLog() использует временные метки с миллисекундным разрешением, но является тупым инструментом, поскольку все его сообщения журнала находятся на уровне предупреждения.Apple System Log time в миллисекундах?

Apple System Log - это гораздо более мелкозернистая система с 8 различными уровнями. НО ... его отметки времени имеют только 1-секундное разрешение. Я читал man-страницу о форматах времени, но все они кажутся только второму.

Очевидно, что эта информация доступна, по крайней мере, NSLog. Много может продолжаться через секунду; есть ли способ получить лучшее разрешение с ASL?

+1

В 'Console.app' выберите' View'> 'Milliseconds'. –

+2

Отлично, никогда не видел. Однако это не влияет на журнал консоли Xcode. Возникает новый вопрос: где во всех файлах журнала есть журналы Xcode для устройств iOS, работающих в симуляторе или на устройстве iOS? –

+1

Я считаю, что это место '~/Library/Logs/iOS Simulator/ /' –

ответ

0

Вы можете добавить ".#" в формат времени в ASL (и syslog), чтобы указать точность. Таким образом, "utc.3" будет форматироваться в формате UTC с миллисекундами. Вы можете добавить это как к аргументам , так и к 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 аргумента 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"); 

a d выход:

2016-02-01T14:16:39.562030-05 Info - Hello 

(я хотел бы предостеречь, что приведенные выше фрагменты кода предназначены только для демонстрации задания формата отображения времени точности в ASL. Фактическое использование, скорее всего, должно включать dispatch_once для настройки, используйте очередную диспетчерскую очередь для ведения журнала.)

Смежные вопросы