10

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

现在我还需要记录 C++ 库消息,并且我必须在 Java 使用的同一个文件中执行它,这样我才能按时间顺序排列所有内容。

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

有没有更好的办法?

4

3 回答 3

1

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

  1. 将 logback 与数据库附加程序一起使用。数据库将确保事务提交按顺序进行,并带有时间戳。在某些数据库中,您可以将其设为触发器并使用可能更有效的本机时间戳。

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

  3. Select * from table order by timestamp asc output to a file 将按顺序为您提供日志。

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

于 2013-07-17T20:56:42.320 回答
1

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

于 2013-07-17T17:17:57.660 回答
-2
#include <android/log.h> 

...
int error;
...
__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "Some error: code = %d", error);
...
于 2013-06-26T12:46:13.563 回答