iOS學習筆記40-日誌重定向

1、日誌重定向

咱們在iOS開發過程當中,咱們時常會使用NSLog打印到控制檯的日誌信息進行代碼調試,但這樣調試的前提是鏈接上Xcode。
若是進行真機調試但同時又不能鏈接Xcode的時候,就不能直接在xcode的控制檯查看輸出日誌了,可是程序仍是會執行那些Log的,若是要查看這些日誌,咱們就須要把輸出日誌信息保存到文件中,而後進行查看。數組

標準NSLog的打印默認是往標準錯誤(stderr)進行打印的,咱們只須要修改NSLog的打印輸出路徑便可實現日誌重定向xcode

如下是日誌重定向代碼:
#pragma mark - 用戶方法,將NSLog的輸出信息寫入到文件中
/* 將NSlog打印信息保存到Document目錄下的文件中 */
- (void)redirectLogToDocumentFolder
{
    // 獲取沙盒路徑
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    NSString *documentDirectory = [paths objectAtIndex:0];
    // 獲取打印輸出文件路徑
    NSString *fileName = [NSString stringWithFormat:@"myData.log"];
    NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:fileName];
    // 先刪除已經存在的文件
    NSFileManager *defaultManager = [NSFileManager defaultManager];
    [defaultManager removeItemAtPath:logFilePath error:nil];
    // 將NSLog的輸出重定向到文件,由於C語言的printf打印是往stdout打印的,這裏也把它重定向到文件
    freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+", stdout);
    freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+", stderr);
}

AppDelegateapplication:didFinishLaunchingWithOptions:中調用:app

- (BOOL)application:(UIApplication *)application 
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 重定向Log日誌信息到Document文件中
    [self redirectLogToDocumentFolder];
    return YES;
}

到這裏還沒結束,由於你的Log日誌信息已經打印到了真機應用的沙盒文件中,你還須要把它拷貝到你的Mac上進行查看,你就須要設置共享文件配置 :指針

在應用程序的Info.plist文件中添加UIFileSharingEnabled鍵,並將鍵值設置爲YES調試

一旦iOS設備插入到用戶計算機,iTunes就會在選中設備的Apps標籤中顯示一個文件分享區域。設置了文件共享後,用戶就能夠向該目錄添加文件或者將文件移動到桌面計算機中。就是說,設置了文件共享後,一旦設備鏈接上電腦,能夠經過iTune查看指定應用程序的共享文件夾,將文件拷貝到你的電腦上看。

日誌

2、文件流知識補充

1. 打開文件

FILE *fp = fopen(文件路徑,打開方式);code

打開方式: 
  • r : 讀,若是文件不存在返回NULL,存在就打開
  • w : 寫,若是文件存在則覆蓋,不存在則建立
  • a : 追加,若是文件存在則追加,不存在則建立
  • r+ : 在r的基礎上,多增長了寫的權限
  • w+ : 在w的基礎上,多增長了讀的權限
  • a+ : 在a的基礎上,多增長了讀的權限
  • t : 文本文件(默認的),結合有rt、wt、at、rt+
  • b : 二進制文件,結合有rb、wb、ab、rb+
2. 文件操做
  1. char ch = fgetc(文件指針);
    做用:從文件中讀取一個字符
    【fgetc和getc沒有區別,用法也同樣】
  2. fputc(字符,文件指針);
    做用:寫入一個字符到文件
  3. fgets(字符數組,長度n,文件指針);
    做用:從文件指針指向的文件中讀取n-1個字符存到字符數組裏,會自動在後面加\0,字符數組用來保存你讀取出來的字符串
    【遇到「\n」當即結束讀取】
  4. fputs(字符串,文件指針);
    做用:寫入一個字符串到文件指針指向的文件
  5. fread(保存數據的首地址,每塊的大小,多少塊,文件指針);
    做用:從文件指針指向的文件中分塊讀取(文件指針),告訴它一次讀取多少塊(多少塊),每塊多大(第二個參數),存到哪(第一個參數)
    【它只關心具體讀的字節數,不會關心這些本身裏面有沒有換行 】
  6. fwrite(數據的首地址,每塊的大小,多少塊,文件指針);
    做用:將數據分塊寫入到文件指針指向的文件。第一個是告訴系統,寫入什麼數據,第二個是告訴系統每塊多少字節,第三個是告訴系統分多少塊寫入,第四個是寫入到哪一個文件
  7. fscanf(文件指針,格式化控制符,地址列表);
    做用:格式化讀取
  8. fprintf(文件指針,格式化控制符,參數列表);
    做用:格式化寫入
  9. freopen(文件路徑path, 打開方式mode, 文件指針fp);
    做用:實現重定向,把預約義的標準流文件定向到由path指定的文件中。標準流文件具體是指stdinstdoutstderr。其中stdin是標準輸入流,默認爲鍵盤;stdout是標準輸出流,默認爲屏幕;stderr是標準錯誤流,通常把屏幕設爲默認。
3. 關閉文件

fclose(文件指針);orm

有什麼問題能夠在下方評論區中提出!O(∩_∩)O哈!
相關文章
相關標籤/搜索