【发布时间】:2011-01-09 19:10:46
【问题描述】:
我有一个 C++ 应用程序和一个 Java 应用程序需要以相同的方式记录消息。我的 Java 应用程序使用由 Log4j 配置支持的 Apache Commons Logging。我需要一个 log4j 配置,以便我可以在一个位置更改我的日志记录首选项。在我的 C++ 应用程序中,我捕获了对 printf() 和 fprintf(std***) 的所有调用,我认为我有以下选项:
在我的 C++ 应用程序中创建一个分支,从 (f)printf() 调用到新进程标准输入创建一个管道,并启动一个 Java 程序,该程序使用 Commons Logging 从标准输入和日志中读取数据
使用 JNI 的 JNI_CreateJVM() 在 C++ 应用程序中创建 JVM,并在调用 (f)printf() 时调用 Java 日志记录方法
使用类似 Log4cxx 的东西来读取与 Java 应用程序相同的配置并在 C++ 中本地登录
我想尽可能避免使用选项 3,因为我不想在我的应用程序中添加另一个第三方依赖项。我知道从 C++ 过渡到 Java 会产生性能成本,但我不确定它是否会那么重要。
【问题讨论】: