Как стать автором
Обновить

Комментарии 20

Я на скрин посмотрел несколько секунд и уже глаза заболели. Там цвета сменить можно?
да, сменить цвета можно, равно как и отключить их вообще или отключить вывод сообщений до определенного уровня.
Это еще не вырвиглаз. Бывает и хуже — когда в пределах одной строки есть 4-5 цветов и весь вывод заставляет вспоминать irssi…
Как-то оно не в стиле с++… Вместо одного log-stream синглетона куча функций с труднозапоминаемыми названиями…
ну это не функции, а макросы. А суть очень простая — получения __LINE__ и т.п. данных в месте использования. В сях иначе не получится (с учетом кросплатформенности)
Да уж… QDebug куда красивше выглядит. Да и его вывод куда угодно можно перехватывать.
И разве _tmain был в стандартах? Оо
А в HTML писать умеет?
Вообще, конечно, многопоточность unicode и вывод в несколько получателей логов для библиотеки логгирования звучит как «поддерживается сложение, умножение и вычисление определителя матриц» для математической библиотеки.
по-умолчанию не умеет, может использовать в качестве back-end-а например apache log4cxx.
Вообще насчет требования «базовых вещей» — всё очень даже непросто. Тот же log4cxx, когда я его смотре, тёк… я уж молчу про его зависимости. Boost Logging v2 тянет за собой добрую часть буста, что далеко не всегда оправдано, и с поддержкой wchar_t у нее есть сложности… В своё время смотрел гугловский логгер, у него вроде и по сей день нет поддержки wchar_t…

Предложите аналоги — рассмотрим и их…
Прежде чем рассматривать аналоги, нужно определиться с требованиями к библиотекам логирования. Для одного из своих высоконагруженных проектов я выбирал между:

* Pantheios
* ACE
* google-glog
* Boost.Log by Andrey Semashev
* Boost.Logging by John Torjo
* log4cplus
* log4cpp
* log4cxx

Вдаваться в специфику проекта не буду. Скажу лишь, что выбор пал на lo4cplus в силу его размеров, отсутствия внешних зависимостей и использования критический секций для Windows.

Pantheios не стали использовать из-за отсутствия поддержки rolling files (на тот момент ее еще не было) и зависимости от STLSoft STL.

И, если автор возьмется за сравнительный анализ логгеров, отдельно хотелось бы выделить google-glog. Его CHECK-макросы — это нечто.
Моё личное мнение что ротация логов это административная функция. Например в банках есть поставленая процедура закрытия дня и логи архивируются по её завершении (и это время не полночь). В иных системах бизнес правила могут быть другие. В любом случае ротацию можно самому сделать, это не сложно.

На самом деле библиотека не задумывалась изначально как логгер, это была API для логирования, которая передаст информацию в нижележащий «настоящий логгер». А уж потом на неё накрутили «примеров»…
Вот смотрю на куски апи, что тут представлены, там ужас в том же стиле, что картинка с готовым логом на скриншоте. Ну неужели нельзя было просто передрать класс QDebug на голых плюсах?
В каких ситуациях это может потребоваться?
#include <pantheios/implicit_link/ber.WindowsConsole.h>
этот код в проекте означает что для кросс-платформенного куска кода потребуются ифдефы — неудобно.

вы не описали собственно вкусностей библиотеки — а именно — можно ли одновременно выводить лог в разные места, есть ли асинхронные/синхронные логгеры, что насчет формата вывода ( ну там кастомные дату-время указать)

а вот скорость работы логгера лично меня волнует мало. Просто если логов много — имхо нужно использовать логгер асинхронный ( это сразу же поднимет его скорость до максимума ) — в то же время если лог-файл уже огромный — то как ни увеличивай скорость работы — запись в файл будет узким горлышком, поэтому любой синхронный логгер будет тормозить.
Насчет WindowsСonsole — это просто для цветной консоли в винде, так можно юзать fprintf — он на консоль будет печатать, но без цвета. И это кросплатформено.

Можно ли выводить в разные места? А я вывожу в два: в файл и консоль. Можно и в разные в общем.

Асинхронный логер — это спорная штука. Одно дело когда логгер используется как трассировщик (например биржевые данные в логах должны быть — требования бизнеса банка), другое дело, когда он используется как логгер. Я сильно не уверен что вы захотите асинхронный логгер, в который уйдет крешдамп или подобная предсмертная информация.
не спорю, разные логгеры для разного нужны. Я как раз и спрашивал есть ли такая возможность
вот тут я пояснил почему сами функции по выводу логов кажутся достаточно слабыми.
вопрос — предусматривает ли этот логгер полную свою остановку по команде, во всех потоках etc?

Ибо у меня log4cxx не выгружается, несмотря на насильный тычок через LogManager. Убил бы скотину, он мне итоговое падение приложения своими библиотеками замусоривает (:
Столько приседаний в самом начале. Поэтому и пишут свои логгеры, чтобы
#include "mylogger.h"
MyLog log;
//...
log << "my variable = " << variable << std::endl;

Хотя подсветка это плюс конечно.
Кстати, поддерживает ли pantheios ежедневное обновление логов? чтобы новый файл каждый день?
1. Множество макросов — это плохо
2. Какова стоимость отключенного логера? Сколько стоит пройти через строчку логирования, если лорнет отключен совсем, или если нет необходимости выводить этот уровень ошибки? Ленивое вычисление аргумента логера есть?
3. Как происходит сериалация объекта?
4. Сколько стоит использование этой библиотеку в коде?

Мы остановили свой выбор на mlog. Есть конечно недостатки, но их мало.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории