我有一个C ++库,Java应用程序通过JNI使用它。在Java应用程序中,我使用logback来生成日志。
现在我还需要记录C ++库消息,我必须在Java使用的同一个文件中完成,所以我可以按时间顺序排列所有内容。
我目前尚未实现的方法是创建一个名为 Logger 的C ++类,它将通过JNI将消息发送给Java,然后Java将记录这些消息。缺点是我丢失了Logback功能,比如记录线程的名称或产生日志的代码行。
有更好的方法吗?
答案 0 :(得分:1)
一个简单的解决方案是使用公共服务进行日志记录,例如syslog。 在Java代码中,设置适当的appender以将日志写入syslog。在您的C ++代码中,只需本机调用syslog即可。系统日志将按时间顺序组合所有日志。
答案 1 :(得分:1)
我过去使用的一种可能的解决方案: -
对数据库追加器使用logback。数据库将确保 事务提交按顺序,带有时间戳。在一些数据库中 你可以使它成为一个触发器并使用可能的本机时间戳 效率更高。
C ++部分需要有一个类似的appender和/或修改为写入同一个表。 (log4cpp有效,或者如果你有 专有的,可能需要稍加修改)
从表顺序中选择*按时间戳asc输出到文件将按顺序为您提供日志。
在我最后一个地方,我们使用sqlite来存储这些日志,因为与oracle或更重的日志相比,开销很小,我们可以在以后需要时删除该文件。
答案 2 :(得分:-1)
#include <android/log.h>
...
int error;
...
__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "Some error: code = %d", error);
...