记录从c++到Java的消息
Logging messages from C++ to Java
我有一个c++库,通过JNI被Java应用程序使用。在Java应用程序中,我使用logback生成日志。
现在我需要记录c++库消息以及我必须在Java使用的相同文件中做,所以我可以按时间顺序拥有所有内容。
我目前的方法(尚未实现)是创建一个名为Logger的c++类,它将通过JNI向Java发送消息,然后Java将记录这些消息。缺点是我失去了Logback功能,比如记录线程的名称或生成日志的代码行。
有更好的方法吗?
一个简单的解决方案是使用通用的日志服务,比如syslog。在Java代码中,设置适当的appender以将日志写入syslog。在c++代码中,只需本地调用syslog即可。所有日志将由syslog按时间顺序组合。
我过去使用过的一个可能的解决方案:-
-
使用logback与数据库追加程序。DB将确保事务按顺序提交,带有时间戳。在一些数据库中您可以将其设置为触发器并使用本机时间戳更有效率。
-
c++部分将需要有一个类似的追加器和/或修改写入同一表。(log4cpp可以工作,或者如果您有专有的,可能需要稍微修改)
-
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);
...
相关文章:
- boost::进程间消息队列引发错误
- 在线编译器中的分段C++没有打印消息
- C++错误消息*成员参考.**初学者*
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- msgpack:C++和Java之间的消息传递
- C 客户端和Java服务器消息
- 将消息从C 服务器发送到Java客户端
- 套接字Java到C++-消息的长度总是8192个字符
- 如何查看从服务器 Java 到C++客户端的整个消息
- 为什么我在运行 java 程序时收到此消息
- 如何从java程序中打印.exe printf()消息
- 如何在Byte Array Java中表示头值和实际消息
- 线程和消息队列体系结构.Java和C++的区别
- 记录从c++到Java的消息
- Cap'n Proto - 在 Java 中查找消息大小
- 在Java中编写带分隔符的c++ Protobuf消息和读取
- 在 Java 中读取 protobuf 消息时的异常
- 无法解密在 Java 中加密的消息
- 通过 TCP 套接字在 C++ 和 Java 之间发送消息