我已将第 3 方框架集成到我的应用程序中。
该框架会定期将消息写入日志。
有什么方法可以在我的应用程序代码中捕获这些消息?
我需要从那里提取一些有用的数据。
我已将第 3 方框架集成到我的应用程序中。
该框架会定期将消息写入日志。
有什么方法可以在我的应用程序代码中捕获这些消息?
我需要从那里提取一些有用的数据。
你说它把它写到一个“日志”——如果它也是一个它记录的文件,然后写你自己的后台任务,每隔一段时间查看文件大小,如果它发生了变化,然后发布一个唤醒到你的代码的其他部分. 如果它记录到“标准输出”或“标准错误”(fd==1 或 fd==2),您可以打开自己的日志文件,然后重新分配 FILE *. 现在发送到 stdout 或 stderr 的所有内容都将发送到您的文件。
编辑:有很多关于如何使用 freemen 的帖子——就像一行代码——从这个Rerouting stdin and stdout from C开始。您可能必须尝试该模式,但我怀疑“a”会起作用,如果不尝试“w”。如果文件不存在,将创建该文件。
代码类似于 `freopen(pathToMyLogFile, "a", stdout)',请检查返回代码。在 Xcode 文档视图中搜索命令或从终端使用 man。
如果您知道框架的日志记录方法,我的意思是包含您感兴趣的 NSLog 的方法,您可以使用自己的方法调整方法并在打印之前捕获消息。
在 objC 中,方法名称映射到它的实现(IMP)。交换方法实现(IMP)称为方法调配。通过方法调配,您可以使方法 A 调用 IMP B,反之亦然。有很多资源可以详细解释你。
这种技术的适用性取决于框架记录信息的方式。但是,这可以为您提供实现目标的线索。