В Xcode, есть ли способ отключить метки времени, которые появляются в консоли отладчика при вызове NSLog?
Консоль отладчика Xcode позволяет легко увидеть любые сообщения отладки, которые мое приложение отправляет с помощью NSLog()
, но на них всегда есть префикс метки времени:
2009-08-30 04:54:48.128 MyApp[94652:a0f] some log message
2009-08-30 04:54:50.647 MyApp[94652:a0f] another log message
...
Я не использую этот префикс, и он занимает много места. У меня такое чувство, что оно жестко запрограммировано в систему регистрации Apple, но на всякий случай есть решение:
Можно ли в консоли отладчика показывать мне сообщения журнала без префикса метки времени?
Примерно так было бы идеально:
some log message
another log message
...
Ответы
Ответ 1
NSLog() это то, что делает это, а не консоль отладчика.
Самый простой способ избежать этого - вообще не использовать NSLog. Вы можете использовать fprintf(), но это неприятно, потому что он не поддерживает типы форматирования% @.
Я обычно пишу функцию для этого:
void MyLog(NSString *format, ...) {
va_list args;
va_start(args, format);
NSString *formattedString = [[NSString alloc] initWithFormat: format
arguments: args];
va_end(args);
[[NSFileHandle fileHandleWithStandardOutput]
writeData: [formattedString dataUsingEncoding: NSNEXTSTEPStringEncoding]];
}
Очевидно, измените его, чтобы добавить символ новой строки или использовать более короткий префикс и т.д.
(Исправлено бродячих Ctrl-B)
Ответ 2
Определите макрос
#if __has_feature(objc_arc)
#define MDLog(format, ...) CFShow((__bridge CFStringRef)[NSString stringWithFormat:format, ## __VA_ARGS__]);
#else
#define MDLog(format, ...) CFShow([NSString stringWithFormat:format, ## __VA_ARGS__]);
#endif
И используйте этот макрос в вашем коде, например
NSLog(@"some log message");
MDLog(@"some log message");
Вот вывод консоли
NSLog → 2014-01-28 10:43:17.873 TestApp[452:60b] some log message
MDLog → some log message
P.S.
Если кто-то хочет, чтобы пользовательские журналы, которые дают вам больше информации, например, имя метода/номер строки и т.д., могут загрузить исходный код MLog.h on GitHub
.,
Ответ 3
введите этот код в ваш .pch файл, и вы закончите
#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
обратите внимание на ## часть
Ответ 4
Чтобы продолжать использовать NSLog в сочетании с ответом bbum, используйте макрос препроцессора, чтобы переопределить NSLog для вашей собственной функции.
#define USECUSTOMLOGS 1
#if USECUSTOMLOGS
#define NSLog MyLog
#endif
Это заменит NSLog на MyLog во время компиляции. По сути, вы можете продолжать использовать NSLog везде, и он все равно будет использовать ваш собственный формат для окна консоли. Вы также можете изменить его обратно, чтобы использовать NSLog в любое время, изменив 1 на 0.
Ответ 5
Версия ARC:
void NFLog(NSString *format, ...)
{
va_list args;
va_start(args, format);
NSString *formattedString = [NSString stringWithFormat:format, args];
formattedString = [formattedString stringByAppendingString:@"\n"];
va_end(args);
[[NSFileHandle fileHandleWithStandardOutput] writeData: [formattedString dataUsingEncoding: NSUTF8StringEncoding]];
}
обновление:
Что я делаю, добавьте этот код в xxx-Prefix.pch, тогда вы можете использовать его в любом месте:
#define newLine do { [(NSFileHandle*)[NSFileHandle fileHandleWithStandardOutput] writeData:[@"\n" dataUsingEncoding: NSUTF8StringEncoding]]; } while(0);
#define NFLog(args,...) do { [(NSFileHandle*)[NSFileHandle fileHandleWithStandardOutput] writeData:[[NSString stringWithFormat:args, ##__VA_ARGS__] dataUsingEncoding: NSUTF8StringEncoding]]; } while(0); newLine
и если вы хотите вернуть NSLog:
#define NFLog(args,...) NSLog(args,##__VA_ARGS__)
Ответ 6
В левом верхнем углу окна консоли есть раскрывающееся меню, в котором говорится, что вывод всех выходных/отладочных/выходных данных.
Выберите целевой результат. Он работал над моими старыми версиями Xcode, но, честно говоря, это не с моей текущей версией 4.3.
Надеюсь, это поможет вам.
JR
Ответ 7
Это проще, чем предлагаемые решения. Используя неосторожное решение Choosy и добавив немного больше, чтобы сделать записи журнала в выпусках, вы получите только макрос. Просто добавьте этот макрос в свой заголовок или файл .pch. Этот макрос будет отображать записи журнала, когда флаг DEBUG включен, в версиях вы не увидите записи журнала.
#ifdef DEBUG
#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#define Log(x, ...) NSLog(@"%s %d: " x, __FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define Log(x, ...)
#endif
Ответ 8
Чистый Лог Макрос
Вот макрос, который я сделал для этой цели. Он работает так же, как NSLog, но только с вашим текстом, без дополнительной информации
Макрос (вставьте в свой .h)
#define CLog(__string, ...) fprintf(stderr, "\n%s", [([NSString stringWithFormat:__string, ##__VA_ARGS__]) UTF8String])
Пример использования:
CLog(@"I am %i days and %i years old", 3, 7);
Журналы:
I am 3 days and 7 years old