標籤:ios ios開發 iphone 日誌
對於那些做後端開發的工程師來說,看LOG解Bug應該是理所當然的事,但我接觸到的行動裝置 App開發的工程師裡面,很多人並沒有這個意識,查Bug時總是一遍一遍的試圖重現,試圖調試,特別是對一些不太容易重現的Bug經常焦頭爛額。而且iOS的異常機制比較複雜,Objective-C的語言駕馭也需要一定的功力,做出來的應用有時候挺容易產生崩潰閃退。一遍一遍的用XCode取應用崩潰記錄、解析符號,通常不勝其煩,有時還對著解析出來的調用棧發獃,因為程式當時的內部狀態常常難以看明白,只能去猜測。
對於真機,日誌沒法儲存,不好分析問題。所以有必要將日誌儲存到應用的Docunment目錄下,並設定成共用檔案,這樣才能取出分析。
首先是日誌輸出,分為c的printf和標準的NSLog輸出,printf會向標準輸出(sedout)列印,而NSLog則是向標準出錯(stderr),我們需要同時讓他們都將日誌列印到一個檔案中。
例子:
freopen("xx.log","a+",stdout);
freopen("xx.log","a+",stderr);
具體做法:
#pragma mark - 使用者方法,將nslog的輸出資訊寫入到dr.log檔案中
// 將NSlog列印資訊儲存到Document目錄下的檔案中
//此函數要在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中調用,這個函數在AppDelegate.m中實現的。
- (void)redirectNSlogToDocumentFolder
{
NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *documentDirectory = [pathsobjectAtIndex:0];
NSString *fileName = [NSStringstringWithFormat:@"dr.log"];//注意不是NSData!
NSString *logFilePath = [documentDirectorystringByAppendingPathComponent:fileName];
//先刪除已經存在的檔案
NSFileManager *defaultManager = [NSFileManagerdefaultManager];
[defaultManagerremoveItemAtPath:logFilePatherror:nil];
// 將log輸入到檔案
freopen([logFilePathcStringUsingEncoding:NSASCIIStringEncoding],"a+",stdout);
freopen([logFilePathcStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
}
此函數要在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
中調用,這個函數在AppDelegate.m中實現的。
/*******************************************************************************/
//當真機串連Mac調試的時候把這些注釋掉,否則log只會輸入到檔案中,而不能從xcode的監視器中看到。
// 如果是真機就儲存到Document目錄下的dr.log檔案中
UIDevice *device = [UIDevicecurrentDevice];
if (![[devicemodel]isEqualToString:@"iPad Simulator"]) {
// 開始儲存記錄檔
[selfredirectNSlogToDocumentFolder];
}
/*******************************************************************************/
最後配置共用資料夾:
在應用程式的Info.plist檔案中添加UIFileSharingEnabled鍵,並將鍵值設定為YES。將您希望共用的檔案放在應用程式的 Documents目錄。一旦裝置插入到使用者電腦,iTunes9.1就會在選中裝置的Apps標籤中顯示一個File Sharing地區。此後,使用者就可以向該目錄添加檔案或者將檔案移動到案頭電腦中。如果應用程式支援檔案分享權限設定,當檔案添加到Documents目錄後,應用程式應該能夠識別並做出適當響應。例如說,應用程式可以將新檔案的內容顯示介面上。請不要向使用者展現目錄的檔案清單並詢問他們希望對檔案執行什麼操作。
就是說,一旦裝置串連上電腦,可以通過iTune查看指定應用程式的共用資料夾,將檔案拷貝到你的電腦上看。
參考串連:
1.http://hi.baidu.com/ios_zb_com/item/ea528f4a8b1100d8c1a59217
2.http://www.cnblogs.com/ThankForYou/archive/2012/09/12/2681739.html
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
iOS 將Log日誌輸出到檔案中儲存