3

我正在尝试重定向所有 NSLog 输出,以便能够在应用程序内的 UITextView 中查看我的所有日​​志(出于调试目的,可能稍后使用 TestFlight 记录所有内容)。我不能使用众所周知的 DLog,因为我想从我不拥有的框架中捕获日志。

我通过将标准错误“重定向”到管道并从该管道读取来做到这一点。无论如何,当从 Xcode 中启动应用程序时,这在模拟器和设备上运行良好。但是,当应用程序在设备上“手动”启动时,这不起作用。

似乎 NSLog 调用对设备没有影响:我没有从管道中读取任何内容。但是,如果我在 stderr 上手动写入:fprintf(stderr, "test")我可以从管道中读取它,所以问题不在于 stderr 而在于 NSLog 函数。

为什么它在设备上什么也不做?有没有办法让它甚至在设备上写在 stderr 上?

如果无法在设备上使用 NSLog,是否有另一种方法可以从外部框架收集日志?

谢谢你。

4

2 回答 2

4

NSLog 转到设备上的系统日志。您可以使用 C API asl (Apple System Log)访问系统日志;另请查看此博客文章

但是,如果您使用的是 TestFlight,则只需使用 TFLog 语句替换/附加那些 NSLog 语句就容易得多。

TFLog(@"This comment is live on TestFlight.");
于 2012-07-05T16:24:37.633 回答
0

如果你想要一些 UILogging,你可以考虑使用 ULog,一个基于 UIAlertView 的Logging #define 指令。

// ULog will show the UIAlertView only when the DEBUG variable is set 

#ifdef DEBUG
#   define ULog(fmt, ...)  { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%s\n [Line %d] ", __PRETTY_FUNCTION__, __LINE__] message:[NSString stringWithFormat:fmt, ##__VA_ARGS__]  delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; }
#else
#   define ULog(...)
#endif

(来源: http: //overbythere.co.uk/blog/2012/01/alternatives-nslog

于 2012-09-12T07:07:05.143 回答