我正在用C ++实现一个日志服务器;接受来自Java程序的日志消息(通过log4j套接字appender)。如何在C ++中阅读这些Java日志对象?

有帮助吗?

解决方案

您应该配置log4j appender以发送XML格式的消息。那么这只是在C ++中读取XML的问题。

其他提示

序列化的java对象是一个字节流,需要来自Java Runtime的元信息才能重建java对象。如果系统中没有这种元信息,您必须自己添加这些信息,这很乏味且容易出错。我是第二个发送XML的想法 - 这就是发明XML序列化的原因:)

另一种非常快速的语言无关序列化方法是 protobuf 。原始文件(描述数据结构的元文件)使用protoc编译,protoc为各种目标语言编写IO代码。

我在我的应用中使用它并做了一些基准测试可能会给你一个线索,如果它符合你的目的。 我所知道的唯一缺点是protobuf根本不处理引用。如果你的一个对象包含两次相同的对象,那么它将被写入两次而不是仅仅一次引用前一个实例(Java序列化就是这种情况)。

关于您的原始问题,我同意Thorbjørn的看法,读取和编写序列化Java对象将会非常困难并且容易出错。

如果您考虑采用protobuf方式,请随时使用此日志记录事件protobuf文件作为启动器。

json是解决这类问题的最好方法。

Log4cxx是C ++的Log4j端口,也许你可以从中收集一些想法甚至直接使用它?

JSON! JSON! JSON! JSON!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top