2012-11-05 183 views
2

原始問題: 什麼是iOS應用程序的NSLog的替代日誌記錄模塊?請解釋你親身體驗過的優點和缺點。NSLog替代品?

附加要求1: 我曾嘗試使用TestFlight TFLog這也與日誌上傳到其服務器幫助,但它似乎當你需要時,應用程序在後臺運行的記錄被限制。有助於滾動/壓縮日誌文件和服務器上傳的日誌記錄系統將大有幫助。

附加請求2: 有些人寫的另一個NSLog的問題是Apple提交應用程序生產時不喜歡它。

謝謝。

+0

如果你告訴我們你想約的NSLog不同的會是什麼幫助。 – sosborn

+0

Sosborn,我只是添加了一些更多的信息,但我也在跳來聽說我可能還沒有意識到的一些重要功能。謝謝。 – x89a10

+0

我看到,在問題被完全編輯之後,有人通過大多數回答向下投票,而沒有任何評論。聖誕老人,請向該人士發送聖誕禮物,以及編輯批准人。 –

回答

7

總是有printf系列函數,它們通常比NSLog快,但不支持對象的%@格式說明符。

最近我一直在使用優秀的Lumberjack框架進行日誌記錄,這是異步的,不會對代碼產生性能影響。它還具有大量用於日誌輸出格式的自定義功能。

+1

這看起來很有趣。我一定會嘗試使用這個。謝謝。 – x89a10

+1

伐木工人是非常好的。如果你想要看一下https://github.com/fpillet/NSLogger的一些不同的日誌框架 – CRDave

2

如果您有興趣製作自己的NSLog變種(完全替換) ,看看here

如果您不想製作自己的NSLog,但寧願自定義當前的NSLog可以查看一下on this page instead列出的一些技巧。

就我個人而言,我更喜歡redo-NSLog從頭開始的方法,因爲它提供了更多的控制。然而,它需要花費相當多的時間來實現,並且您必須瞭解可變參數列表及其實現以使其正確工作。當你想將va_lists傳遞給不同的函數時,這會變得特別痛苦。製作自己版本的一個便利功能是,您可以設置功能以登錄到任何你喜歡的地方(控制檯或不同的日誌文件) - 這一切都會在一天結束時回到智能fprintf調用。另一方面,如果你只是想自定義NSLog,那麼你真正需要做的就是熟悉一些方便的編譯器宏(如__LINE__, __PRETTY_FUNCTION__等)。這是更簡單的方法,可能只是你所追求的一切,但它並不像控制你自己的那樣提供更多的控制。

希望這會有所幫助!

1

我知道的最好的選擇是宏,你可以使用它與任何預定義的C宏__FILE__,__PRETTY_FUNCTION__等。

原型

#define MyLog(args...) MyLogImpl(__FILE__,__PRETTY_FUNCTION__,args); 

void MyLogImpl(const char *filename, const char *funcPrettyName, NSString *formatStr, ...); 

實施

隨着va_start() va_end()你就可以得到的格式。爲了彌補printf缺乏的格式支持,你要使用這個值如下:

NSString *messageStr = [[NSString alloc] initWithFormat:formatStr arguments:replacingArgumentParameters]; 

,這樣你就能夠與任何其他數據一起打印標準的消息,像

fprintf(stderr, "%s %s", filename, messageStr); 

它不僅給你自己的信息,而且文件名稱也叫MYLog。

另一個有用的技巧是限制消息到當前的log_level或正在運行的配置。

如果您覺得自己有足夠的經驗,您還可以繼續嘗試重新定義標準的NSLog宏。

0

正如「A-Live」所說,最好的選擇是宏。只需在你的.pch文件中定義下面的MACRO即可。

#ifdef DEBUG 
    #define debug(format, ...) CFShow((__bridge void *)[NSString stringWithFormat:@"%s [LINE: %d] ==>> " format,__PRETTY_FUNCTION__, __LINE__, ## __VA_ARGS__]); 
#else 
#endif 

現在,如何使用上面的宏?

樣品

debug(@"Version Number is 1.0"); 

注:

您可以通過編輯模式禁用所有調試日誌。 在編輯模式中選擇第一個選項卡,即「信息

在「信息」選項卡設置構建配置爲「釋放」,然後按「確定」按鈕。

enter image description here