Вопрос

Я реализую сервер журналов на C ++;который принимает сообщения журнала из Java-программы (через log4j socket appender).Как мне прочитать эти объекты ведения журнала Java на C ++?

Это было полезно?

Решение

Необходимо настроить приложение log4j для отправки сообщений в формате XML. Тогда это просто вопрос чтения XML на C ++.

Другие советы

Сериализованные Java-объекты - это байтовый поток, которому требуется мета-информация из Java Runtime для возможности восстановления Java-объектов. Без этой мета-информации, доступной в системе, вы должны добавить эту информацию самостоятельно, что утомительно и подвержено ошибкам. Я поддерживаю идею отправки XML вместо этого - для этого и была изобретена сериализация XML:)

Еще один очень быстрый способ независимой от языка сериализации - это protobuf . Прото-файлы (мета-файлы, которые описывают ваши структуры данных) компилируются с использованием protoc, который пишет IO-код для различных целевых языков.

Я использую его в своем приложении и провел бенчмаркинг, который может дать вам подсказку, если это служит вашей цели. Единственный недостаток, который мне известен, это то, что protobuf вообще не обрабатывает ссылки. Если один из ваших объектов содержит один и тот же объект дважды, он будет записан дважды, а не один раз со ссылкой на предыдущий экземпляр (как в случае с сериализацией Java).

Что касается вашего первоначального вопроса, я согласен с Thorbj & rn; rn, что чтение и запись сериализованных объектов Java будут слишком сложными и подверженными ошибкам.

Если вы решите пойти по протобуфу, не стесняйтесь использовать этот файл protobuf события протоколирования в качестве начального.

json - лучший способ решить подобные проблемы.

Log4cxx - это порт Log4j для C ++, возможно, вы можете извлечь из этого некоторые идеи или даже использовать его напрямую?

JSON!JSON!JSON!JSON!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top