Какую библиотеку журналов использовать для кросс-языковой (Java, C ++, Python) системы - PullRequest
11 голосов
/ 22 мая 2010

У меня есть система, в которой центральный контроллер Java запускает процессы анализа, которые могут быть написаны на C ++, Java или Python (в основном это C ++). Все эти процессы в настоящее время выполняются на одном сервере. Что вы предлагаете

  • Создать центральный журнал, в который все процессы могут записывать
  • Что если в будущем я перенесу некоторые процессы на другой сервер. Как я могу поддерживать распределенное ведение журнала?

Спасибо!

Ответы [ 3 ]

5 голосов
/ 22 мая 2010

Я бы порекомендовал использовать собственный регистратор платформы - системный журнал в Posix и журнал событий в Windows.

Для C ++ вы можете использовать собственные вызовы на платформе.

Я знаю, что Python поставляется с упаковщиком syscall для Posix, а в журнале событий есть расширение PyWin32 . Я предполагаю, что кто-то уже создал Java-оболочки.

Обновление

Относительно системного журнала и нескольких файлов. Системный журнал поддерживает концепцию средств - с помощью средств вы можете получить разные журналы, чтобы перейти в разные файлы. К сожалению, услуги предопределены; в то время как есть 8 общих от LOG_LOCAL0 до LOG_LOCAL7, вы не можете определить произвольные возможности.

Также обратите внимание, что демон syslog должен решить, куда направлять сообщения журнала для каждого объекта / уровня. Возможно, вам придется настроить конфигурацию демона syslog, чтобы каждое средство отправлялось в отдельный файл.

1 голос
/ 28 мая 2010

Я бы использовал Apache log4cxx или Apache log4j .Это эффективно.У этого есть иерархии Регистратора, чтобы модулировать Ваши журналы.Это проверенная технология на некоторое время.В настоящее время существуют приложения для консоли, файлов, компонентов графического интерфейса, удаленных серверов сокетов, регистраторов событий NT и удаленных демонов системного журнала UNIX.Также возможно вести асинхронный журнал.

Как я могу поддерживать распределенное ведение журнала?Например, с удаленными серверами-сокетами.

1 голос
/ 22 мая 2010

Apache имеет межплатформенные библиотеки журналов , которые позволяют вам регистрироваться на разных языках программирования с использованием похожих API. К сожалению, они не имеют API-интерфейса Python, хотя вы должны быть в состоянии создать его с помощью log4cpp и Boost.Python.

Проект, над которым я работаю, использует одну из этих библиотек для входа в базу данных, что позволяет нам «распределенную регистрацию» с централизованным местом для сообщений журнала. Я должен признать, что я не фанат этого. Другой проект, над которым я работаю, использует одну из этих библиотек для входа в собственную систему ведения журналов. В журнале событий Windows есть некоторые функции для распределенного ведения журнала, но системный журнал AFAIK - нет.

Хотя у меня нет никакого опыта с этим, лучше подойдет проект Facebook Scribe . Набор функций соответствует вашим требованиям, включая Python API. К сожалению, он использует Thrift, который не работает для C ++ в Windows (то есть компилятор Thrift генерирует код C ++, который работает только в UNIX). Возможно, вам удастся обойти эту проблему с помощью Cygwin, но я не могу обещать, что этот подход будет работать.

...