Комментарии 22
По поводу недостатка — для нас очень большое ограничение, у нас обязательная поддержка старого GCC 3.4 в проекте, поэтому пока останемся на своем детском трехколесном велосипедике.
В syslog умеет писать?
В syslog умеет писать?
+3
syslog поддерживает там, где есть syslog.h
В плане кода с вашей стороны почти никакой разницы: что типа макросов SYSLOG(LEVEL) вместо LOG(LEVEL)
В плане кода с вашей стороны почти никакой разницы: что типа макросов SYSLOG(LEVEL) вместо LOG(LEVEL)
0
Насчет C++11, ругается из-за хедера type_traits, который сразу проверяет поддержку нового стандарта
0
Если честно, не очень порадовал сам формат библиотеки. Один заголовочный файл на 6000 строк с макросами и шаблонами… и его я должен заинклюдить в каждом своем translation unit…
И еще я пока не понял по API, можно ли как-то динамически изменить уровень вывода в лог?
Допустим. У меня есть отладочный вывод на устройстве. Которое… маленькое. Файлы не попишешь. Я могу подключиться к устройству по телнет, и отдать команду изменить уровень дебажного вывода в одном из контекстов. Можно ли с этой либой подобного достичь?
Не подумайте что я как-то ругаю или подбное, простое любопытство насчет возможностей.
И еще я пока не понял по API, можно ли как-то динамически изменить уровень вывода в лог?
Допустим. У меня есть отладочный вывод на устройстве. Которое… маленькое. Файлы не попишешь. Я могу подключиться к устройству по телнет, и отдать команду изменить уровень дебажного вывода в одном из контекстов. Можно ли с этой либой подобного достичь?
Не подумайте что я как-то ругаю или подбное, простое любопытство насчет возможностей.
+6
6000 строк с макросами и шаблонами… и его я должен заинклюдить в каждом своем translation unit…
Вероятно, многие из хедеров которые вы используете даже больше, а, кроме того, 6000 строк будет только один раз при первом вхождении, разве нет?
И еще я пока не понял по API, можно ли как-то динамически изменить уровень вывода в лог?
Да, можно.
Во-первых в командной строке (но это без динамики, только при старте), ну и во-вторых на лету тоже:
Скрытый текст
int main(int argv, char* argc[])
{
/* Копия конфигурации по умолчанию */
el::Configurations defaultConf;
/* Изменим в ней флаг для вывода инфо сообщений */
defaultConf.set(el::Level::Info,
el::ConfigurationType::Enabled, "false");
/* Применим к логгеру по умолчанию */
el::Loggers::reconfigureLogger("default", defaultConf);
LOG(INFO)<<"Не будет выведено";
LOG(WARNING)<<"Будет выведено";
return 0;
}
0
Про изменение логирования — уже неплохо. А про «первое» вхождение Вы как-то либо неправы, либо не поняли меня =)
Впрочем я полагаю, эту проблему как раз легко решит precompiled header.
Впрочем я полагаю, эту проблему как раз легко решит precompiled header.
0
только один раз при первом вхождении
Он говорил про разные translation unit, а не про множественные включения в один.
+1
_INITIALIZE_EASYLOGGINGPP. Он требуется для инициализации некоторых статических переменных и установки обработчика для крэшей.
Вот это смущает, почему нельзя всё это инициализировать просто при первом обращении к библиотеке?
0
Вероятно, на тот случай, если у вас будет крэш до того, как Вы что-то выведете в журнал (т.е. до первого обращения к библиотеке).
0
Потому что это — не инициализация, а определения переменных (обратите внимание, эта строчка должна находиться за пределами main). В идеальном мире вся эта радость должна была быть в отдельном файле, easylogging++.cpp, — но так как библиотека, по-видимому, заточена под программы класса все-в-одном-файле — то соответствующий код перенесли из отдельного модуля в макрос.
-1
Каждый программист должен написать плеер, аську, обертку над браузерным движком и конечно же библиотеку логгирования.
+4
Поиграться можно, а использовать — рано. Всё-таки syslog (если есть) более удобен: все стандартно. Или же log4cplus: можно и динамически, и статически прилинковать, если надо монолитный бинарник. + формат настроек как в log4j позволяет не париться с настройками логирования(опять же все стандартно)
+1
Я использую этот логгер в одном своем проекте. Не нравится ровно две вещи: во-первых, нельзя без смены макросов логировать в syslog/stderr (типа, выбора бэкэнда логирования), во-вторых, при парсинге argc/argv он не выкидывает свои опции из списка аргументов, поэтому следующий за ним getopt не очень удобно применять (например, указывая на неправильный формат аргументов). Впрочем, первое ограничение является самым неудобным, а кроме того, достаточно сложным в фиксе.
+1
потокобезопасна? В частности во момент ротации логов.
+1
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Логирование сообщений с Easylogging++