我正在尝试重定向所有NSLog输出,以便能够在应用程序内的UITextView中查看我的所有日志(出于调试目的,以后可能会使用TestFlight记录所有内容)。我不能使用众所周知的DLog,因为我想从我不拥有的框架中捕获日志。
我是通过将'stderr'重定向到管道并从此管道读取来实现的。 无论如何,当从Xcode中启动应用程序时,这在模拟器和设备上运行良好。 但是,当应用程序在设备上“手动”启动时,这不起作用。
似乎NSLog调用对设备没有影响:我没有从管道中读取任何内容。但是,如果我在stderr上手动写入:fprintf(stderr, "test")
我可以从管道中读取它,所以问题不在于stderr,而在于NSLog函数。
为什么它在设备上什么都不做?有没有办法让它甚至在设备上写入stderr?
如果无法在设备上使用NSLog,是否有另一种从外部框架收集日志的方法?
谢谢。
答案 0 :(得分:3)
NSLog进入系统登录设备。您可以使用C API asl (Apple System Log)访问系统日志;还可以查看this blog post。
但是,如果您正在使用TestFlight,则使用TFLog语句替换/附加这些NSLog语句要容易得多。
TFLog(@"This comment is live on TestFlight.");
答案 1 :(得分: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)