将消息从C ++记录到Java

时间:2013-06-19 13:22:38

标签: java c++ logging

我有一个C ++库,Java应用程序通过JNI使用它。在Java应用程序中,我使用logback来生成日志。

现在我还需要记录C ++库消息,我必须在Java使用的同一个文件中完成,所以我可以按时间顺序排列所有内容。

我目前尚未实现的方法是创建一个名为 Logger 的C ++类,它将通过JNI将消息发送给Java,然后Java将记录这些消息。缺点是我丢失了Logback功能,比如记录线程的名称或产生日志的代码行。

有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

一个简单的解决方案是使用公共服务进行日志记录,例如syslog。 在Java代码中,设置适当的appender以将日志写入syslog。在您的C ++代码中,只需本机调用syslog即可。系统日志将按时间顺序组合所有日志。

答案 1 :(得分:1)

我过去使用的一种可能的解决方案: -

  1. 对数据库追加器使用logback。数据库将确保 事务提交按顺序,带有时间戳。在一些数据库中 你可以使它成为一个触发器并使用可能的本机时间戳 效率更高。

  2. C ++部分需要有一个类似的appender和/或修改为写入同一个表。 (log4cpp有效,或者如果你有 专有的,可能需要稍加修改)

  3. 从表顺序中选择*按时间戳asc输出到文件将按顺序为您提供日志。

  4. 在我最后一个地方,我们使用sqlite来存储这些日志,因为与oracle或更重的日志相比,开销很小,我们可以在以后需要时删除该文件。

答案 2 :(得分:-1)

#include <android/log.h> 

...
int error;
...
__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "Some error: code = %d", error);
...