пятница, сентября 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 особенно если вам импонирует его архитектура.

5 комментариев:

Ctapmex комментирует...

glog не плох. но блин документации совсем мизер. да и обновляется очень редко. многие встречающиеся ошибки/замечания нахожу на трекере.

Лаврентий Палыч комментирует...

Документация у glog'а да - отвратительная. Пришлось читать код и гуглогруппы для не таких уж экзотических вещей(например поменять максимальный размер логфайла с дефолтного 1.8Gb). На баги я пока не нарывался, но я не использую wchar, мне не нужен сложный функционал в логгере - я за относительный примитивизм логгера. Всегда можно наваять быстро анализатор логов на каком-нибудь скриптовом языке и это по идее должно хватить для любых задач.

По поводу редко обновляется - судя по этому не так уж и редко если не считать летний перерыв. Но не часто - да.

Вобщем лично я пока доволен. В моей многопоточной молотилке glog отрабатывает на ура. Пнуть его мне пока не за что кроме как за убогую документацию и отсутствие механизма ротации.

Ctapmex комментирует...

я так понимаю, используете его под linux ? большинство замечаний идет под win.

ну и судя по update листу - активно там только issue создаются )

Лаврентий Палыч комментирует...

Да использую под linux.

update list нормальный - видел гораздо хуже у проектов которые явно не умрут и развиваются. Но допускаю что авторы могут подзабить на windows баги (например из-за отсутствия оной на окружающих машинах, хотя не иметь винду хотя бы в виртуалке странно для девелопера который делает вроде как кроссплатформенный продукт).

Сергей комментирует...

да он хорош и превосходит многие по своей простате