我可以在 JNI 项目中使用 Java 中的 log4j 和 C++ 中的 log4cxx 将日志存储在同一个文件中吗?

Posted

技术标签:

【中文标题】我可以在 JNI 项目中使用 Java 中的 log4j 和 C++ 中的 log4cxx 将日志存储在同一个文件中吗?【英文标题】:Can I use log4j in Java and log4cxx in C++ in a JNI project to store log in the same file? 【发布时间】:2021-07-02 00:27:19 【问题描述】:

我正在编写一个非 android JNI 程序,而 java 端使用 log4j 进行日志记录。我可以在 C++ 端使用 log4cxx 或 log4cpp 并与 java 共享相同的配置,以便将本机日志存储在同一个文件中吗?这样做有什么缺点吗?

【问题讨论】:

【参考方案1】:

这可能会也可能不会按预期工作,具体取决于您的配置文件的复杂程度。例如,您可能会遇到文件翻转的问题,并且 log4cxx 端和 log4j 端之间的事情可能会不同步。

您可能遇到的第二个问题是 log4cxx 和 log4j2 使用不同的配置文件格式;这仅在您使用 log4j 1.x 时才有效。

我过去所做的只是在我将从 JNI 代码调用的类中创建一个记录器;这通过始终使用 Java 记录器(即使从 JNI 代码内部)来解决问题。缺点是如果您的 JNI 代码非常复杂,这将不起作用。 Here 是我不久前创建的一个项目,其中包含一些实用功能来帮助执行此任务,这可能会帮助您入门。

【讨论】:

以上是关于我可以在 JNI 项目中使用 Java 中的 log4j 和 C++ 中的 log4cxx 将日志存储在同一个文件中吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 JNI 项目中的 UnsatisfiedLinkError(找不到依赖库)

使用 JNI 在 C 中访问 Java 对象中的 Java 对象

我可以在 Java 中控制 JNI 本机方法调用名称吗?

C ++中的JNI将文件读取到jbyteArray

C ++中的JNI将文件读取到jbyteArray

jni不通过线程c回调java的函数