2013-05-28 74 views

回答

0

你說它把它寫到一個「日誌」 - 如果它是一個文件它也記錄下來,然後寫你自己的後臺任務,每隔一段時間查看文件大小,如果它改變了,然後發送喚醒給其他部分代碼。如果它的日誌記錄爲「標準輸出」或「標準錯誤」(fd == 1或fd == 2),則可以打開自己的日誌文件,然後重新分配FILE *。現在發送到stdout或stderr的所有內容都會發送到您的文件。

編輯:有很多職位上如何使用自由職業者 - 就像一行代碼 - 從這一個開始Rerouting stdin and stdout from C。你可能不得不嘗試模式,但我懷疑「a」會起作用,如果不嘗試「w」。如果該文件不存在,該文件將被創建。

代碼將類似`freopen(pathToMyLogFile,「a,stdout)',檢查返回代碼。在Xcode文檔視圖中搜索命令或使用終端中的man。

+0

你說得對,我的意思是std-out \ std-err。我如何確定框架使用哪一個?更重要的是,如何將其更改爲本地文件? – Rizon

+0

映射第一個stdout,看看是否可行 - 如果不嘗試stderr。它的一行代碼可以改變每一種方式。 –

+0

當然,我還必須在運行過程中不時地清除文件,所以它不會太大。對不對? – Rizon

-1

如果您知道框架的日誌記錄方法,我的意思是包含您感興趣的NSLog的方法,您可以使用自己的方法調用該方法並在打印之前捕獲消息。

在objC方法名稱映射到它的實現(IMP)。交換方法實現(IMP)稱爲方法混合。通過方法調整,您可以使方法A調用IMP B,反之亦然。有many資源可供您詳細解釋。

這種技術的適用性取決於框架日誌信息的方式。然而,這可以讓你領先實現你想要的。

+0

C函數不會被混淆。 – CodaFi

+0

@CodaFi,我知道C的功能是不可調節的。在問題中沒有提到C代碼。我沒有說他也可以調配NSLog。我正在考慮包含日誌的方法。所以我覺得這個否決票是不公正的。 – Vignesh

+0

那麼'NSLog()'是什麼呢?它肯定是因爲heck不是一個ObjC方法。 – CodaFi

相關問題