我按照回答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. 寫入控制檯或文件蟒蛇
- 8. 將subprocess.Popen stderr重定向到控制檯
- 9. Ruby - 如何將控制檯輸入寫入文件
- 10. log4j的不寫入文件,但其寫入到控制檯
- 11. 從java中將控制檯輸出寫入文本文件
- 12. 將Ruby控制檯輸出寫入文本文件
- 13. 子控制檯和寫入控制檯值的時間步驟
- 14. 連續將控制檯的輸出寫入文件
- 15. 將控制檯的輸出寫入C#文件?
- 16. 在控制檯和文件上同時寫文本
- 17. 創建將寫入文件或寫入控制檯輸出的通用方法
- 18. SLF4J寫入文件,但不寫入日食控制檯
- 19. 爲什麼Powershell會寫入控制檯,但不寫入文件?
- 20. Python 3.4寫入文件正在寫入控制檯?
- 21. 在寫入文件後無法在控制檯中寫入
- 22. 爲什麼在txt文件上寫入與控制檯不同?
- 23. 使用Java將控制檯輸出寫入文件
- 24. Linux將控制檯輸出寫入文件
- 25. grunt將內容寫入控制檯而不是文件?
- 26. Logback不會將日誌寫入文件,但控制檯
- 27. 從Eclipse將控制檯消息寫入文件
- 28. 將stderr和stdout寫入一個文件,但也寫stderr到一個單獨的文件
- 29. 將Grunt任務寫入控制檯
- 30. JSP - 將XML寫入控制檯
可能重複[的NSLog()到控制檯和文件(http://stackoverflow.com/questions/9619708/nslog-to-both-console-and-file) – AechoLiu