2011-08-21 106 views
3

我想在我的iPhone應用程序中創建兩個日誌文件。如果我使用freopen()將NSLog輸出重定向到一個文件,那麼所有的日誌語句都會進入一個提到的文件。
但我想把一些日誌語句放到一個文件中,而一些文件放到不同的文件中。

任何想法,我該怎麼做?在iPhone應用程序中創建多個日誌文件

回答

2

最好的方法是編寫自己的記錄器類作爲您替代NSLog()替代的替代品。這樣,您可以在運行時輕鬆確定應將哪些日誌寫入哪個文件。您的自定義類可以使用NLog()同時寫入控制檯。這似乎是最佳方法,因爲freopen()只是批量重定向所有日誌輸出。

+0

這就是我的想法,但我正在尋找一些可以爲我做的框架,我可以節省時間來編寫自定義記錄器。感謝建議。 – Anshul

14

開始與伐木工人框架:https://github.com/robbiehanson/CocoaLumberjack

我希望把一些日誌報表合併成一個文件,而一些到不同的文件

有一對夫婦的方式來實現這一目標。這裏有一個例子: 添加2文件記錄器:

fileLoggerA = [[DDFileLogger alloc] init]; 
fileLoggerB = [[DDFileLogger alloc] init]; 

[DDLog addLogger:fileLoggerA]; 
[DDLog addLogger:fileLoggerB]; 

所以在這一點,所有的日誌報表將得到引導到兩個fileLogger1 & fileLogger2。接下來,我們將爲每個fileLogger添加一個「篩選器」,以便它們忽略不針對它們的日誌語句。

我們將創建2個不同的記錄宏做到這一點:考勤()&博客()

fileLoggerA只能從寫日誌考勤記錄語句()。 fileLoggerB只會從BLog()寫入日誌語句。

要進行設置,我們可以利用「日誌上下文」。你可以做簡單的東西如:

#define ALog(frmt, ...) SYNC_LOG_OBJC_MACRO(0, 0, 1, frmt, ##__VA_ARGS__) 
#define BLog(frmt, ...) SYNC_LOG_OBJC_MACRO(0, 0, 2, frmt, ##__VA_ARGS__) 

很明顯,你可以得到比這更先進的(如增加對日誌級別等支持),但要注意的是考勤如何擁有1「背景」,並BLog有一個「上下文」2.

現在你只需要創建一個「自定義格式化程序/過濾器」。這裏有一個例子:

- (NSString *)formatLogMessage:(DDLogMessage *)logMessage 
{ 
    if (logMessage->logContext == theContextIShouldLog) 
     return logMessage->logMsg; 
    else 
     return nil; 
} 

,當然,您的自定義格式/過濾器添加到文件記錄器:

[fileLoggerA setLogFormatter:[MyContextFilter filterWith:1]]; 
[fileLoggerB setLogFormatter:[MyContextFilter filterWith:2]]; 

這些主題的更多信息可以通過伐木工人項目頁面上找到:

https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomFormatters https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomContext https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomLogLevels

+0

現在這是不錯的食譜,謝謝羅比:) –

+0

我試過這個,它看起來像兩個文件記錄器都指揮他們的輸出到同一個文件。這是在設備和模擬器上。 – thegrinner

+0

感謝它爲我的作品。 –

相關問題