пятница, сентября 23, 2011

Логирование в С++. Сравнительный мини-обзор

Вполне стандартная задача(логирование) имеет слишком много инструментов для решения в C++. В том плане что ярко выраженного лидера нет(ну если не считать за лидера "свой велосипед"). Пришлось мне ковыряться. Дело усугубилось тем что среди c++ девелоперов очень много людей считающих что подробная документация не нужна (кому надо - в исходник заглянут).

После поверхностного поиска я выделил следующее:
log4j клоны для c++ - log4cxx , log4cpp , log4cplus;
Pantheios;
boost-log;
google-glog.

Попробовав log4cxx  я заподозрил плохое увидев что по сути в проекте не было изменений с 2004 года. Увидев незакрытые баги связанные с многопоточностью(что для меня критично), я на него забил и решил пока не трогать другие log4j клоны (судя по датам релизов живой только log4cplus и если вам хочется во чтобы-то ни стало использовать клон log4j то наверное стоит обратить внимание именно на него).

Далее идут не клоны log4j, так что стандартная схема log4j включая все плюсы и минусы в них отсутствует. Это не значит что они слабее функционально (хотя некоторые объективно нацелены на простоту), они просто другие.

Pantheios выглядит отлично в плане документации/описаний, по отзывам вроде у всех работает без проблем. Я почти остановился на нём, но решил уж посмотреть оставшиеся альтернативы.

Boost-log также неплохо документирован, но не включен официально в boost и есть сообщения о странностях в многопоточных приложениях. Вобщем для использования нужны дополнительные аргументы в его пользу после дополнительных исследований.

Наконец очередь дошла до google-glog. И тут я понял что это то что мне нужно. Очень мощный и одновременно простой функционал. DLOG (ну и DCHECK и тд) например позволяет выкинуть мысли о том во что выльется слишком подробное логирование в плане производительности - как только вы скомпиляете релиз-версию все DLOG вызовы превратятся в тыкву просто исчезнут. Но у glog есть и минусы. Например встроенной ротации логов нет. Документация очень куцая, часто приходится заглядывать в исходники (особенно в http://code.google.com/p/google-glog/source/browse/trunk/src/logging.cc ) для поиска настроек (например для максимального размера логфайла).

Вывод:
Несмотря на недостатки пока считаю glog победителем в плане простоты и эффективности. Надо конечно посмотреть как он в продакшне под большой нагрузкой себя покажет, но учитывая его простоту не думаю что будут проблемы.

Достоен внимания и Pantheios особенно если вам импонирует его архитектура.

понедельник, сентября 05, 2011

Ubuntu One vs Dropbox на ubuntu server

Есть у убунты Ubuntu One - очередная sync/share тулза на облаке. Имея несколько безголовых(для тех кто не в курсе - сервер без монитора,клавы и мыши) убунту серверов и необходимость синхронизировать некоторые некритичные несекретные(достаточно несекретные чтобы использовать сторонний сервис для синхронизации) данные не только между ними но и наружу(в том числе на не *nix системы) решил я попробовать Ubuntu One. Но оказалось что из консоли это можно сделать только с помощью жутких хаков (например, да и то там в комментах пишут что уже не работает). Вобщем удивительное рядом - продукт компании не работающий на другом продукте компании.

В итоге пришлось использовать dropbox. Вот тут например написано как это сделать: http://ubuntuservergui.com/ubuntu-server-guide/install-dropbox-ubuntu-server.

P.S. Впрочем если погуглить то становится понятно что и на десктопе убунты большинство выбирают dropbox.