我按照回答here中的建议将iOS设备上的NSLog输出重定向到文件,效果很好。问题是它不再显示在设备的控制台上。我真正喜欢的是将stderr流开到控制台和文件的方式。有没有人有一个想法如何做到这一点?将iPhone上的stderr写入文件和控制台
回答
我在另一个线程(NSLog() to both console and file)上找到了可以接受的答案。
提供的解决方案有,如果没有检测到调试器只重定向到一个文件,如:
if (!isatty(STDERR_FILENO))
{
// Redirection code
}
感谢Sailesh为这个问题的答案。
我们应该在哪里写这个if语句?在应用程序委托中,还是必须将其写入每个视图控制器? – Max
您应该编写if语句来封装将stderr重定向到文件的代码。 –
一旦你freopen()
的文件描述符,你可以从它读取和做你喜欢的数据。 this的一些想法对你有用。
您可以将其写回标准输出,或尝试直接写入/dev/console
。我从来没有试图在iPhone上打开/dev/console
,但我猜尽管在沙箱外面也是可以的。我不确定应用审核流程如何处理。
或者您可以重定向到TCP套接字并在远程telnet客户端上查看。这种方式不需要XCode!
基本上:
创建一个标准的C函数调用一个OBJ-C静态方法:
void tcpLogg_log(NSString* fmt, ...) { va_list args; va_start(args, fmt); [TCPLogger tcpLog:fmt :args]; va_end(args); }
静态的OBJ-C方法:
(void)tcpLog:(NSString*)fmt :(va_list)args { NSLogv(fmt, args);
}if(sharedSingleton != nil && sharedSingleton.socket != nil) { NSString *time = [sharedSingleton.dateFormat stringFromDate:[NSDate date]]; NSString *msg = [[NSString alloc] initWithFormat:fmt arguments:args]; mach_port_t tid = pthread_mach_thread_np(pthread_self()); NSString *str = [NSString stringWithFormat:@"%@[%X]: %@\r\n", time, tid, msg]; NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; [sharedSingleton.socket writeData:data withTimeout:NETWORK_CLIENT_TIMEOUT_PERIOD tag:0]; }
然后在您的.PCH文件,添加以下行来覆盖的NSLog()
define NSLog(...) tcpLogg_log(__VA_ARGS__); void tcpLogg_log(NSString* fmt, ...);
当然需要更多的细节来处理TCP套接字。工作的源代码可以在这里找到: https://github.com/driedler/iOS-TCP-Logger/wiki/About
的- 1. 将控制台线写入文件
- 2. log4j2不写入控制台和文件
- 3. 在控制台和日志文件上重定向stderr stdout
- 4. 将所有stderr记录到文件和控制台
- 5. 将JSON写入控制台
- 6. 捕获未写入标准输出stderr的控制台输出?
- 7. Ruby - 如何将控制台输入写入文件
- 8. log4j的不写入文件,但其写入到控制台
- 9. 将Ruby控制台输出写入文本文件
- 10. 从java中将控制台输出写入文本文件
- 11. 子控制台和写入控制台值的时间步骤
- 12. 将控制台的输出写入C#文件?
- 13. 创建将写入文件或写入控制台输出的通用方法
- 14. 在写入文件后无法在控制台中写入
- 15. 将stderr和stdout写入一个文件,但也写stderr到一个单独的文件
- 16. Linux将控制台输出写入文件
- 17. grunt将内容写入控制台而不是文件?
- 18. JSP - 将XML写入控制台
- 19. 将Grunt任务写入控制台
- 20. 长时间写入控制台和日志文件(Python)
- 21. Powershell将程序的输出写入控制台live和管道到文件
- 22. 在VB.net中写入控制台和stdout
- 23. 如何将STDOUT和STDERR记录到单个文件中并使用Ruby在控制台中仅显示STDERR?
- 24. 同步写入控制台
- 25. 写入导轨控制台
- 26. iPhone - 将NSMutableDictionary写入文件
- 27. Eclipse插件 - 延迟写入控制台
- 28. iPhone +文件上传控制
- 29. 如何将日志消息同时写入日志文件和控制台?
- 30. 如何将slf4j配置为能够写入控制台和文件?
可能重复[的NSLog()到控制台和文件(http://stackoverflow.com/questions/9619708/nslog-to-both-console-and-file) – AechoLiu