【发布时间】:2010-11-28 08:33:33
【问题描述】:
我正在用 C++ 实现一个日志服务器;接受来自 Java 程序的日志消息(通过 log4j 套接字附加程序)。如何在 C++ 中读取这些 java 日志记录对象?
【问题讨论】:
我正在用 C++ 实现一个日志服务器;接受来自 Java 程序的日志消息(通过 log4j 套接字附加程序)。如何在 C++ 中读取这些 java 日志记录对象?
【问题讨论】:
您应该配置 log4j appender 以发送 XML 格式的消息。那么就只是用 C++ 读取 XML 的问题了。
【讨论】:
序列化的 java 对象是一个字节流,它需要来自 Java 运行时的元信息才能重建 java 对象。如果系统中没有可用的元信息,您必须自己添加该信息,这既乏味又容易出错。我赞同发送 XML 的想法——这就是 XML 序列化的发明目的:)
【讨论】:
另一种与语言无关的序列化非常快速的方法是protobuf。 proto-files(描述数据结构的元文件)是使用 protoc 编译的,它为各种目标语言编写 IO 代码。
我在我的应用程序中使用它并做了一些benchmarking,如果它符合您的目的,可能会给您一个线索。 我知道的唯一缺点是 protobuf 根本不处理引用。如果您的一个对象包含两次相同的对象,它将被写入两次,而不是仅写入一次并引用前一个实例(Java 序列化就是这种情况)。
关于您最初的问题,我同意 Thorbjørn 的观点,即读取和写入序列化的 Java 对象太难且容易出错。
如果您考虑采用 protobuf 方式,请随时使用 this logging event protobuf file 作为入门。
【讨论】:
json 是解决此类问题的最佳方法。
【讨论】:
Log4cxx 是 C++ 的 Log4j 端口,也许您可以从中收集一些想法,甚至直接使用它?
【讨论】:
JSON! JSON! JSON! JSON!
【讨论】: