iOS中NSlog重定向到文件

1、應用場景:
對於真機,日誌沒法保存,不好分析問題。所以有必要將日誌保存到應用的Docunment目錄下,這樣才能取出分析。

2、相關知識:
日誌輸出,分爲c的printf和標準的NSLog輸出,printf會向標準輸出(sedout)打印,而NSLog則是向標準出錯(stderr),我們需要同時讓他們都將日誌打印到一個文件中。
 例子:
 freopen("xx.log","a+",stdout);
 freopen("xx.log","a+",stderr);

3、具體實現:
(1)實現下面的方法完成NSLog重定向到文件

- (void)redirectNSLogToDucumentFile{
    //創建文件路徑
    NSString *documentpath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *fileName = [NSString stringWithFormat:@"%@.log",[NSDate date]];
    NSString *logFilePath = [documentpath stringByAppendingPathComponent:fileName];
    //刪除已經存在文件
    NSFileManager *fileManager = [NSFileManager defaultManager];
    [fileManager removeItemAtPath:logFilePath error:nil];
    //log寫入
    freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);
}

(2)具體調用:
在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中調用,具體實現如下

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    UIDevice *device = [UIDevice currentDevice];
    NSLog(@"model:%@  name:%@",[device model],[device name]);
    if ([[device model] isEqualToString:@"iPhone"] || [[device model] isEqualToString:@"iPad"]) {
        [self redirectNSLogToDucumentFile];
    }
    NSLog(@"重定向測試");
    return YES;
}

注意事項:在重定向方法調用之前的log信息會打印在控制檯,之後的會重定向到文件中。如果使用模擬器調試或者讓log打印在控制檯,把調用代碼註釋掉就可以了。

4、查看文件方法:
在Xcode運行狀態下,command + shift + 2打開Devices選項;或者通過圖形界面打開Window->Devices。打開之後,選擇對應的設備->左鍵單擊設置->show container查看文件/Download container下載container Data如下圖:
show Container時的目錄結構:
show Container的狀態只能看到文件存不存在,不能查看文件的具體內容。需要Download Container下載下來Data數據->右鍵顯示包內容才能查看具體內容。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章