2017-02-08 3 views
0

Я ищу способ, чтобы захватить все NSLog выхода в качестве NSArray или любой другой структуру памяти, сохраняя при этом своих журналах консоли нетронутыми. Я создаю инструмент, который по запросу отправляет копию последних строк журнала X на сервер. До сих пор эти варианты, которые я исключил:Захвата NSLog выход в структуре памяти

  • Я не могу перенаправить NSLog в файл, как предложено here, поскольку это будет также удалить все сообщения журнала из консоли.
  • Я пробовал swizzling NSLog с другой настраиваемой функцией, но у меня возникли проблемы с поиском функций Swizzle C в отличие от методов класса.
  • Обертка NSLog в моей собственной функции CustomLog возможна, но я предпочел бы иметь ее в качестве последнего средства. Проект довольно большой, и слишком много вызовов для замены. Я также боюсь потерять консольный вывод из библиотек, где было бы сложно добавить свой CustomLog.

Я искал способ перехвата вывода NSLog или захвата журналов после того, как они были напечатаны на консоли, но я не смог найти ничего, что сработало. Какие-либо предложения?

Обновление: Я закончил переосмысление подхода, и я заменил все вызовы журнала через код собственным методом ведения журнала. Это была дополнительная работа, но гибкость в изменении деталей реализации, оплачиваемых в конце.

ответ

0

Невероятно сложно.

Однако у меня нет ни одного вызова NSLog в моем коде - используйте библиотеку протоколирования или просто определите некоторые макросы, которые будут делать то, что вы хотите, чтобы сделать это, вызвав NSLog или сделав что-то еще.

0

Как насчет перенаправления журналов на console.log в каталоге документов, как вы упомянули в ссылке How to redirect the nslog output to file instead of console.

Если вы хотите отправить журналы на сервер, вы можете прочитать из console.log, который присутствует в каталоге документа и отправить его на сервер.


Еще не довольно решением было бы пересмотреть NSLog так:

void myLoggingFunction(NSString *format, ...) 
{ 

    va_list args; 
    va_start(args, format); 

    // Do my stuff with log 
    NSLog(@"Sample log: Doing my stuff"); 

    NSLog(format, args); 

    va_end(args); 
} 
#define NSLog myLoggingFunction 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    NSLog(@"Test Log output"); 

} 


- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 


@end 

выше выходной код:

2017-02-09 14:39:18.619 Logging_objc[91206:3161193] Sample log: Doing my stuff 
2017-02-09 14:39:18.620 Logging_objc[91206:3161193] Test Log output 
+0

Перенаправление все журналы в файл и удаляет их с консоли. В идеале я хотел бы вести журналы на консоли и быть в состоянии их каким-то образом захватить. – Tjarom

+0

См. Мое редактирование, вы можете использовать этот подход для переопределения NSLog. Может быть добавлено определение в верхнем уровне файла заголовка – manishg

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