记录从c++到Java的消息

Logging messages from C++ to Java

本文关键字:消息 Java c++ 记录      更新时间:2023-10-16

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

现在我需要记录c++库消息以及我必须在Java使用的相同文件中做,所以我可以按时间顺序拥有所有内容。

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

有更好的方法吗?

一个简单的解决方案是使用通用的日志服务,比如syslog。在Java代码中,设置适当的appender以将日志写入syslog。在c++代码中,只需本地调用syslog即可。所有日志将由syslog按时间顺序组合。

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

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

  2. c++部分将需要有一个类似的追加器和/或修改写入同一表。(log4cpp可以工作,或者如果您有专有的,可能需要稍微修改)

  3. Select * from table order by timestamp asc output to a file .

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

#include <android/log.h> 
...
int error;
...
__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "Some error: code = %d", error);
...