Подтвердить что ты не робот

В 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
...
4b9b3361

Ответ 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