log4j网络适配器将事件作为序列化java对象发送.我希望能够捕获此对象并使用其他语言(python)对其进行反序列化.这可能吗?
注意网络捕获很容易; 它只是一个TCP套接字并在流中读取.困难在于反序列化部分
一般来说,没有.
Java序列化的流格式在本文档中定义,但您需要访问原始类定义(以及将其加载到Java运行库中)以将流数据转换回接近原始对象的内容.例如,类可以定义writeObject()和readObject()方法来定制自己的序列化表单.
(编辑: lubos hasko建议有一个小程序来反序列化Python前面的对象,但问题是,为了实现这一点,你的"小java程序"需要加载所有相同类的相同版本.如果你从一个应用程序接收日志消息,这很棘手,如果你要多路复用多个日志流,这真的很棘手.无论哪种方式,它都不会再是一个小程序了.编辑2 :我可能是错的在这里,我不知道什么是序列化的.如果它只是log4j类你应该没问题.另一方面,它可以记录任意异常,如果它们被放入流中,我的观点就好了.)
定制log4j网络适配器并用更容易反序列化的形式替换原始序列化会更容易(例如,您可以使用XStream将对象转换为XML表示形式)