是否可以为已编译的第三方库隐藏或替换NSLog()函数,以便将调试喷入我的日志中?

Kir*_*odd 7 logging cocoa objective-c ios

GoogleConversionPlugin坚持记录随机的无用信息并搞砸我的自动化测试报告.

Mec*_*cki 3

您可以将所有NSLog()输出重定向到任何地方(或重定向到控制台日志以外的文件)或使其调用您自己的日志输出函数(不是正式的,但它有效),但是这将作用于所有NSLog()调用,而不仅仅是来自此 Google 的调用插件,也可以在代码中进行调用。如果您的应用程序是单线程的,您可以使用自己的日志记录功能来检查全局BOOL日志记录当前是否启用或禁用;然而在多线程环境中,您必须控制每个线程(如果您使用 GCD,即使您自己不处理线程,您也是多线程的),这也是可能的,尽管需要更多额外的代码。

所以问题是,它是否是一个有用的解决方案,可以让您全局禁用日志记录(或当前线程),进行插件调用,然后再次将其重新打开?当然,如果插件内部是多线程的(它可能会在您不注意的情况下切换线程),则禁用每个线程将不起作用,但在这种情况下,全局切换仍然有效。

仅控制NSLog()静态库的调用是不可能的,除非您愿意“修补”该库(当然,您可以这样做,而不会让 Google 起诉您)。动态库是可以的,但是当你为 iOS 开发时,你不能使用动态库。

因此,请让我知道哪些可能的解决方案适合您的需求(如果有),我会看看能为您做些什么(例如更新答案并添加一些代码或说明)。

  • “让它调用您自己的日志输出函数(不是正式的,但它可以工作)”,是的!希望上升,但没有细节:( (2认同)