В boost утвердили логгер Boost.Log by Andrey Semashev
От: ankorol Украина  
Дата: 29.03.10 09:59
Оценка: 2 (1) :)
Если верить С++ Next , логгер приняли в boost.
Ссылка на саму библиотеку здесь.
Возможно это положит конец вопросам в этой ветке форума "Какой логгер выбрать?".
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re: В boost утвердили логгер Boost.Log by Andrey Semashev
От: Rakafon Украина http://rakafon.blogspot.com/
Дата: 29.03.10 10:31
Оценка: +1
Здравствуйте, ankorol, Вы писали:
A>Возможно это положит конец вопросам в этой ветке форума "Какой логгер выбрать?".

Т.е. ежели некий инструмент решили таки присоединить к сборнику библиотек "boost", то это априори расставляет все точки над "Ё", давая этой тулзени бесспорное преимущество?
"Дайте мне возможность выпускать и контролировать деньги в государстве и – мне нет дела до того, кто пишет его законы." (c) Мейер Ансельм Ротшильд , банкир.
Re[2]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: ankorol Украина  
Дата: 29.03.10 10:47
Оценка:
Здравствуйте, Rakafon, Вы писали:

R>Т.е. ежели некий инструмент решили таки присоединить к сборнику библиотек "boost", то это априори расставляет все точки над "Ё", давая этой тулзени бесспорное преимущество?


Нет, но популярности ей это точно придаст + кое-какие гарантии на качество.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[2]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: potapov.d  
Дата: 29.03.10 10:54
Оценка:
Здравствуйте, Rakafon, Вы писали:

R>Здравствуйте, ankorol, Вы писали:

A>>Возможно это положит конец вопросам в этой ветке форума "Какой логгер выбрать?".

R>Т.е. ежели некий инструмент решили таки присоединить к сборнику библиотек "boost", то это априори расставляет все точки над "Ё", давая этой тулзени бесспорное преимущество?


Бесспорное преимущество не в Boost TM, а в том что его много где используют. Соответственно появление логгера в бусте избавит от необходимости изобретать велосипед, которые за пять лет работы для разных проектов мне приходилось изобретать уже раза три или четыре.
Re: В boost утвердили логгер Boost.Log by Andrey Semashev
От: Ytz https://github.com/mtrempoltsev
Дата: 29.03.10 12:28
Оценка: +2
Здравствуйте, ankorol, Вы писали:

A>Возможно это положит конец вопросам в этой ветке форума "Какой логгер выбрать?".


Нет не положит. Логирование должно быть настолько простым и незаметным, что-бы даже самый ленивый пользовался. Данный логгер этому требованию к сожалению не соответствует.
Re[2]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: ankorol Украина  
Дата: 29.03.10 12:36
Оценка: 9 (2)
Здравствуйте, Ytz, Вы писали:

Ytz>Нет не положит. Логирование должно быть настолько простым и незаметным, что-бы даже самый ленивый пользовался. Данный логгер этому требованию к сожалению не соответствует.

For ones that don't want to read tons of clever manuals and just need a simple tool for logging, here you go:

#include <boost/log/trivial.hpp>

int main(int, char*[])
{
    BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
    BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
    BOOST_LOG_TRIVIAL(info) << "An informational severity message";
    BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
    BOOST_LOG_TRIVIAL(error) << "An error severity message";
    BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
}

... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[3]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: Ytz https://github.com/mtrempoltsev
Дата: 29.03.10 12:48
Оценка:
На таком уровне конечно. Только это уровень std::cerr, логирование здесь еще даже не начинается, а вот дальше там уже все не так радужно.
Re[4]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: ankorol Украина  
Дата: 29.03.10 12:56
Оценка:
Здравствуйте, Ytz, Вы писали:

Ytz>На таком уровне конечно. Только это уровень std::cerr, логирование здесь еще даже не начинается, а вот дальше там уже все не так радужно.


Библиотека очень гибкая и настраиваемая, добится этого и при этом оставатся простой тяжело. В крайнем случае можно построить свой велосипед поверх Boost.Log но с настройками которые типичные для того или иного программиста и с удобным для него интерфейсом.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re: В boost утвердили логгер Boost.Log by Andrey Semashev
От: Sni4ok  
Дата: 29.03.10 13:20
Оценка: +3 -1 :)
Здравствуйте, ankorol, Вы писали:

скачал исходники, аж 900кб для такой, как казалось бы простой вещи, как логер, более того сделан на стандартных стримах- тоесть даже без тестирования можно сказать что логер — тормоз(хотя конечно и подойдёт для 98% случаев).
Re[2]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: uzhas Ниоткуда  
Дата: 29.03.10 15:30
Оценка: 1 (1) -1
Здравствуйте, Ytz, Вы писали:

Ytz>Здравствуйте, ankorol, Вы писали:


A>>Возможно это положит конец вопросам в этой ветке форума "Какой логгер выбрать?".


Ytz>Нет не положит. Логирование должно быть настолько простым и незаметным, что-бы даже самый ленивый пользовался. Данный логгер этому требованию к сожалению не соответствует.

Согласен, что никакого конца велосипедам не будет.
Я заметил, что все системы логирования имеют пагубную привычку использовать синглтоны в своей реализации и поощрять распространение логирующих операторов по всему коду, что вносит бардак и неконтролируемость. Любой логирующий фреймворк, основанный на шаблонах, обречен на неудачу, ибо он не предоставляет интерфейсов. Шаблоны делают код сильно связным, обращение к глобальным функциям логирования делает код нетестируемым и не реюзабельным. Интерфейсы же обеспечивают слабую связность бизнес кода и логирующего кода.
Для маленьких\средних приложений подход с глобальными функциями логирования действительно оправдан. Разработчиком не надо сильно пыхтеть, чтобы вывести в лог какую-то информацию, для форматирования тоже предоставлены необходимые хелперы (типа operator<<).

Однако при работе с большими приложениями уже начинается совсем другая история:
  1. при появлении динамических библиотек начинаются проблемы с синхронизацией тех самых синглтонов. Ибо в них настраиваются всякие фильтры и другая конфигурация. Появляются баги о том, что в логах появляются debug сообщения, хотя все отконфигурировано для фильтрации таких сообщений (а про длл мы иногда забываем)
  2. появляются повышенные требования к логу:
    • должен быть локализован на 17 языков
    • должен содержать _осмысленную_ информацию для конечного пользователя. например, писать в логе "handle 319 was lost" нельзя писать для юзера и на это заводят баги. Юзер должен понимать по логу что же произошло, дабы не обращаться в суппорт.
    • нужно уметь менять уровни фильтрации через внешние ресурсы — файлы, реестр и тд в рантайме
    • нужно покрыть код юнит-тестами. даже факт логирования можно тестировать с помощью юнит-тестов
    • иногда в зависимости от сценария, юзеру требуется показывать или не показывать одну и ту же запись. то есть есть некий код, который что-то логирует. иногда требуется, чтобы он ничего не логировал и без нарушения OCP с помощью интерфейса мы могли бы решить эту проблему.
    • логи не должны корраптиться при падении приложения (либо восстанавливаться при запуске приложения)
  3. появляются проблемы с логами на стрт-апе и выходе приложения, начинаются пляски вокруг порядка инициализации глобальных\статических объектов.

С помощью интерфейсов можно отключать логи у целой подсистемы (с помощью NullLogger) в рантайме. Аналогично, можно измерять влияние системы логирования на общий перформанс приложения. Опыт показывает, что все обращения с внешними ресурсами (реестр, базы данных, файлы) должны осуществляться через интерфейсы. К сожалению, мне не удалось еще поработать с подобной системой логирования, но мне кажется имеет смысл опробовать такой подход.
Кстати, логирование, вообще говоря, может иметь два вида: вид отладки и вид для конечного юзера. Надо уметь различать эти два типа. Иногда их называют трейсы и логи.
Трейс — это след в системе. Он не обязан быть локализован и вообще, к нему предъявляется мало требований. В трейсе могут фигурировать сущности из области решения (о которых пользователь может и не знать).
Лог же более строг: должен быть локализован и быть осмысленным. Это запись, оставленная пользователю и представляющая ценность для него. В этой записи фигурируют бизнес-объекты.
Re[4]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: jazzer Россия Skype: enerjazzer
Дата: 29.03.10 18:43
Оценка:
Здравствуйте, Ytz, Вы писали:

Ytz>На таком уровне конечно. Только это уровень std::cerr, логирование здесь еще даже не начинается, а вот дальше там уже все не так радужно.


Примеры "не такой радужности" будут? С указанием, как надо было сделать, если можно.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: jazzer Россия Skype: enerjazzer
Дата: 29.03.10 18:46
Оценка:
Здравствуйте, uzhas, Вы писали очень много общих слов.

Есть какое-то более конкретные претензии именно к этой библиотеке? С примерами, по пунктам, и с указанием, как надо.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: skeptik_  
Дата: 29.03.10 18:58
Оценка:
Здравствуйте, uzhas, Вы писали:

жабист штоле? Иначе малопонятен упор на слово интерфейс. Хинт — интерфейс не обязан начинаться со слова интерфейс.
Re[5]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: Ytz https://github.com/mtrempoltsev
Дата: 29.03.10 19:20
Оценка: -1 :)
Здравствуйте, jazzer, Вы писали:

J>Примеры "не такой радужности" будут? С указанием, как надо было сделать, если можно.


Велосипед собственного изготовления.
Минимальная настройка:

void Init()
{
    std::auto_ptr<AbstractWriter> writer(new SimpleWriter());
    std::auto_ptr<AbstractStream> console(new ConsoleStream());
    writer->AddStream(console.release());
    SetupLog(writer.release());
}


Расширенная настройка:
void Init()
{
    using namespace Logger;
    std::auto_ptr<AbstractWriter> writer(new ThreadedWriter());
    std::auto_ptr<AbstractStream> console(new ConsoleStream());
    console->SetLayout(Layout()
            << Layout::TRACE_LEVEL
            << Layout::EXACT_TIME
            << Layout::CODE_FILE
            << Layout::CODE_LINE
            << Layout::MESSAGE);
    writer->AddStream(console.release());
    std::auto_ptr<AbstractStream> file(new FileStream(
            "/tmp/log",
            1024 * 100,    // Максимальный размер файла
            10));        // Максимальное количество файлов
    file->SetLayout(Layout()
            << Layout::DATE
            << Layout::TIME
            << Layout::THREAD_ID
            << Layout::MESSAGE);
    writer->AddStream(file.release());
    writer->AddStream(new SyslogStream());
    SetupLog(writer.release(), Debug);    // Уровень логирования Debug
}

Или из конфигурационного файла:

void Init()
{
    SetupLog("config.xml");
}

Пример файла:

<logger trace_level="debug">
  <writer type = "simple" />
  <stream type = "console" 
    layout = "trace_level exact_time thread_id code_function message" />
  <stream type = "file" 
    layout = "trace_level date time message"
    dir = "/tmp/Log/"
    file_name = "log-file"
    max_file_size = "20000"
    max_file_count = "4" />
  <stream type = "syslog" 
    layout = "message" />
</logger>

Использование:

#include <logger/logger.h>
...
LOG(Info) << "Start";
LOG(Debug) << Sub(1) << "Message" << 1;
LOG(Info) << "Done";
LOG_IF(Warning, 1 < 2) << "Ok";

Boost Log извините разбирать не хочу — страшно, но буду рад если покажете как просто сделать то же самое.
P.S. А еще он вывод красиво раскрашивает
Re[6]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: jazzer Россия Skype: enerjazzer
Дата: 29.03.10 19:40
Оценка:
Здравствуйте, Ytz, Вы писали:

Ytz>Здравствуйте, jazzer, Вы писали:


J>>Примеры "не такой радужности" будут? С указанием, как надо было сделать, если можно.

Ytz>Boost Log извините разбирать не хочу — страшно, но буду рад если покажете как просто сделать то же самое.
Т.е. примеров "не такой радужности" не будет. Понятно.

Ytz>Велосипед собственного изготовления.


Я радикальных отличий от Буст.Лог не увидел.
По фичам выглядит по крайней мере точно так же.

Вот этого я вообще не понял:
LOG_IF(Warning, 1 < 2) << "Ok";

чем это лучше вот этого?
if (1 < 2) LOG(Warning) << "Ok";

Имхо, только хуже. Особенно если у тебя в условии найдутся запятые.

Ytz>P.S. А еще он вывод красиво раскрашивает

Кто? Где? Консольный вывод вставляет терминальные ЕSC-последовательности, что ли?
Так это и в бусте можно сделать:
http://boost-log.sourceforge.net/libs/log/doc/html/log/tutorial/formatters.html
 keywords::format = "[%TimeStamp%]: %_%"

вставляй в эту строчку что хочешь.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[6]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: Ytz https://github.com/mtrempoltsev
Дата: 30.03.10 05:32
Оценка:
Уважаемый skeptik_! Поясните пожалуйста что смешного в моем коде. Мне в целях повышения профессионального уровня очень важна конструктивная критика коллег.
Re[7]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: Ytz https://github.com/mtrempoltsev
Дата: 30.03.10 05:49
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Т.е. примеров "не такой радужности" не будет. Понятно.


Неужели вы считаете разумным изучить досконально документацию ради ответа на форуме? Я открыл документацию, посмотрел как например установить фильтр по уровню логирования:
void init()
{
logging::core::get()->set_filter
(
flt::attr< logging::trivial::severity_level >("Severity") >= logging::trivial::info
);
}
И понял, что это не соответствует моим представлениям о простоте.
И еще раз повторюсь, если вы хорошо знаете библиотеку, то пожалуйста напишите код который делает то же что и у меня. Возможно я не прав и Boost.Log действительно простая и удобная вещь.
Ytz>>P.S. А еще он вывод красиво раскрашивает
J>Кто? Где? Консольный вывод вставляет терминальные ЕSC-последовательности, что ли?
J>Так это и в бусте можно сделать:
J>http://boost-log.sourceforge.net/libs/log/doc/html/log/tutorial/formatters.html
J>
J> keywords::format = "[%TimeStamp%]: %_%"
J>

J>вставляй в эту строчку что хочешь.
Это под Unix консоль, причем не под каждой будет работать одинаково, не говоря уже о том, что под Windows работать не будет вообще.
Re[7]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: Ytz https://github.com/mtrempoltsev
Дата: 30.03.10 06:16
Оценка: +1
Здравствуйте, jazzer, Вы писали:

J>Вот этого я вообще не понял:

J>
J>LOG_IF(Warning, 1 < 2) << "Ok";
J>

J>чем это лучше вот этого?
J>
J>if (1 < 2) LOG(Warning) << "Ok";
J>

J>Имхо, только хуже. Особенно если у тебя в условии найдутся запятые.

Лучше тем, что писанины меньше и тем, что при сборке с отключенным логером условия не будут проверяться.
Re[8]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: jazzer Россия Skype: enerjazzer
Дата: 30.03.10 06:21
Оценка:
Здравствуйте, Ytz, Вы писали:

Ytz>Здравствуйте, jazzer, Вы писали:


J>>Т.е. примеров "не такой радужности" не будет. Понятно.


Ytz>Неужели вы считаете разумным изучить досконально документацию ради ответа на форуме?

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

Ytz>Я открыл документацию, посмотрел как например установить фильтр по уровню логирования:


Ytz>void init()
Ytz>{
Ytz>    logging::core::get()->set_filter
Ytz>    (
Ytz>        flt::attr< logging::trivial::severity_level >("Severity") >= logging::trivial::info
Ytz>    );
Ytz>}

Если в вашем проекте именно этот фильтр так важен, то я не вижу проблем завернуть его в простейшую функцию
void min_log_level(XXX log_level)
{
    logging::core::get()->set_filter
    (
        flt::attr< logging::trivial::severity_level >("Severity") >= log_level
    );
}

и звать потом ее
void init()
{
  min_log_level( logging::trivial::info );
}

или писать такие обертки религия не позволяет?

Ytz>И еще раз повторюсь, если вы хорошо знаете библиотеку, то пожалуйста напишите код который делает то же что и у меня. Возможно я не прав и Boost.Log действительно простая и удобная вещь.

Нет, я ее не знаю, поэтому и воздерживаюсь от высказываний типа "не все радужно" или "все радужно" или "сорцы весят 900кб, поэтому без тестирования понятно, что тормоза".

Ytz>>>P.S. А еще он вывод красиво раскрашивает

J>>Кто? Где? Консольный вывод вставляет терминальные ЕSC-последовательности, что ли?
Ytz>Это под Unix консоль, причем не под каждой будет работать одинаково, не говоря уже о том, что под Windows работать не будет вообще.
понятия не имею, как раскрашивается консоль в винде.
В этом и состоит тайное знание, которого не заюзать в буст.лог?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[8]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: jazzer Россия Skype: enerjazzer
Дата: 30.03.10 06:26
Оценка: 1 (1)
Здравствуйте, Ytz, Вы писали:

Ytz>Здравствуйте, jazzer, Вы писали:


J>>Вот этого я вообще не понял:

J>>
J>>LOG_IF(Warning, 1 < 2) << "Ok";
J>>

J>>чем это лучше вот этого?
J>>
J>>if (1 < 2) LOG(Warning) << "Ok";
J>>

J>>Имхо, только хуже. Особенно если у тебя в условии найдутся запятые.

Ytz>Лучше тем, что писанины меньше и тем, что при сборке с отключенным логером условия не будут проверяться.

Ну если это важно...
Так что насчет запятых?
Типа
LOG_IF(Warning, less_than< int, double >( 1, 2.0 )) << "Ok";
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[8]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: Guard_h4s Россия  
Дата: 30.03.10 06:28
Оценка:
Здравствуйте, Ytz, Вы писали:

Ytz>Лучше тем, что писанины меньше и тем, что при сборке с отключенным логером условия не будут проверяться.

Различие логики debug/release ведет как правило к ловле трудно обнаруживаемых глюков, особенно в неумелых руках. Может стоит поосторожнее с такими макросами, учитывая что не всегда известно кто будет поддерживать ваш код? )
Ну и второй момент — обычно логи вставляют в существующие ветки, а не заводят под них отдельные ифы)
Случай сильно вырожденый, имхо.
Re[9]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: skeptik_  
Дата: 30.03.10 07:09
Оценка:
Здравствуйте, Guard_h4s, Вы писали:

G_>Здравствуйте, Ytz, Вы писали:


Ytz>>Лучше тем, что писанины меньше и тем, что при сборке с отключенным логером условия не будут проверяться.

G_>Различие логики debug/release ведет как правило к ловле трудно обнаруживаемых глюков, особенно в неумелых руках. Может стоит поосторожнее с такими макросами, учитывая что не всегда известно кто будет поддерживать ваш код? )
G_>Ну и второй момент — обычно логи вставляют в существующие ветки, а не заводят под них отдельные ифы)
G_>Случай сильно вырожденый, имхо.

Справедливости ради — когда дважды обсуждали логгер Торо, то требование отсутствия связанного с логгированием кода при выключенном логе высказывали многие. Обсуждение данного логгера я пропустил.
Re[9]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: Ytz https://github.com/mtrempoltsev
Дата: 30.03.10 07:37
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Ну изначально был не просто ответ на форуме, а ваше высказываение относительно этой библиотеки в целом.

J>Да, я считаю, что прежде чем высказываться относительно библиотеки, неплохо хотя бы документацию прочитать.

В третий раз повторю — я открыл документацию, библиотека мне показалось неудобной, если я неправ приведите пример кода который делает то же, что делает мой код.

J>Если в вашем проекте именно этот фильтр так важен, то я не вижу проблем завернуть его в простейшую функцию

J>или писать такие обертки религия не позволяет?

Так зачем мне библиотека которую придется всю оборачивать чтобы удобно было пользоваться?

Ytz>>И еще раз повторюсь, если вы хорошо знаете библиотеку, то пожалуйста напишите код который делает то же что и у меня. Возможно я не прав и Boost.Log действительно простая и удобная вещь.

J>Нет, я ее не знаю, поэтому и воздерживаюсь от высказываний типа "не все радужно" или "все радужно" или "сорцы весят 900кб, поэтому без тестирования понятно, что тормоза".

Ну то есть тоже предметом не владеете?

Ytz>>>>P.S. А еще он вывод красиво раскрашивает

J>>>Кто? Где? Консольный вывод вставляет терминальные ЕSC-последовательности, что ли?
Ytz>>Это под Unix консоль, причем не под каждой будет работать одинаково, не говоря уже о том, что под Windows работать не будет вообще.
J>понятия не имею, как раскрашивается консоль в винде.
J>В этом и состоит тайное знание, которого не заюзать в буст.лог?

Хотите верьте, хотите нет, но я очень хочу юзать Boost.Log чтобы не плодить своих велосипедов, но похоже что данная библиотека по соображениям простоты и удобства не подойдет.
Re[9]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: Ytz https://github.com/mtrempoltsev
Дата: 30.03.10 07:38
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Так что насчет запятых?

J>Типа
J>
J>LOG_IF(Warning, less_than< int, double >( 1, 2.0 )) << "Ok";
J>

Скобки помогут.
Re[10]: В boost утвердили логгер Boost.Log by Andrey Semashe
От: Guard_h4s Россия  
Дата: 30.03.10 08:00
Оценка:
Здравствуйте, Ytz, Вы писали:

Ytz>Скобки помогут.

Увы, помогут далеко не от всего. Сегодня запятая, завтра макрос туда попадет.
Re[11]: В boost утвердили логгер Boost.Log by Andrey Semashe
От: Ytz https://github.com/mtrempoltsev
Дата: 30.03.10 08:03
Оценка:
Здравствуйте, Guard_h4s, Вы писали:

G_>Здравствуйте, Ytz, Вы писали:


Ytz>>Скобки помогут.

G_>Увы, помогут далеко не от всего. Сегодня запятая, завтра макрос туда попадет.

Согласен. Вообще С++ язык который при желании позволяет сломать, что угодно.
Re[10]: В boost утвердили логгер Boost.Log by Andrey Semashe
От: jazzer Россия Skype: enerjazzer
Дата: 30.03.10 11:34
Оценка: +1
Здравствуйте, Ytz, Вы писали:

J>>Да, я считаю, что прежде чем высказываться относительно библиотеки, неплохо хотя бы документацию прочитать.


Ytz>В третий раз повторю — я открыл документацию, библиотека мне показалось неудобной, если я неправ приведите пример кода который делает то же, что делает мой код.

Ну пока что я увидел единственный пример, где однострочный код, который вызвается один раз в программе, выглядит длиннее, чем аналогичный специализированный у вас. Имхо, недостаточно, чтоб называть библиотеку неудобной.

J>>Если в вашем проекте именно этот фильтр так важен, то я не вижу проблем завернуть его в простейшую функцию

Ytz>Так зачем мне библиотека которую придется всю оборачивать чтобы удобно было пользоваться?
Любую универсальную библиотеку приходится оборачивать для удобной работы с ней в условиях конкретного проекта.
Если это не велосипед, который написан специально для конкретного проекта.
Но усилий по написанию велосипеда нужно приложить сильно больше, чем написать удобные обертки, которые уменьшат однострочный код, используемый один раз в программе, с сотни символов до десяти.

J>>Нет, я ее не знаю, поэтому и воздерживаюсь от высказываний типа "не все радужно" или "все радужно" или "сорцы весят 900кб, поэтому без тестирования понятно, что тормоза".

Ytz>Ну то есть тоже предметом не владеете?

А можно иначе понимать слова "я ее не знаю"?
Предметом логирования более-менее владею, опять же на уровне собственных велосипедов.
Как и большинство здесь, я думаю.
Конкретно этой библиотекой — ни разу не использовал, так что опасаюсь писать в стиле "не читал, но осуждаю".

Ytz>>>>>P.S. А еще он вывод красиво раскрашивает

J>>>>Кто? Где? Консольный вывод вставляет терминальные ЕSC-последовательности, что ли?
Ytz>>>Это под Unix консоль, причем не под каждой будет работать одинаково, не говоря уже о том, что под Windows работать не будет вообще.
J>>понятия не имею, как раскрашивается консоль в винде.
J>>В этом и состоит тайное знание, которого не заюзать в буст.лог?
Так что там с раскраской-то?

Ytz>Хотите верьте, хотите нет, но я очень хочу юзать Boost.Log чтобы не плодить своих велосипедов, но похоже что данная библиотека по соображениям простоты и удобства не подойдет.

Что ж вы не написали ревью в мейл-лист, когда шло обсуждение библиотеки, если есть какие-то конкретные претензии?
Но, в принципе, ничто не мешает написать его сейчас — автор библиотеки, скорее всего, прислушается к пожеланиям, если они действительно стоящие.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[11]: В boost утвердили логгер Boost.Log by Andrey Semashe
От: Ytz https://github.com/mtrempoltsev
Дата: 30.03.10 12:47
Оценка:
Здравствуйте, jazzer, Вы писали:

J>>>Да, я считаю, что прежде чем высказываться относительно библиотеки, неплохо хотя бы документацию прочитать.


Не обязательно съедать ведро некой субстанции, для определения чем это является. Ни в коем случае не про Boost.Log

Ytz>>В третий раз повторю — я открыл документацию, библиотека мне показалось неудобной, если я неправ приведите пример кода который делает то же, что делает мой код.

J>Ну пока что я увидел единственный пример, где однострочный код, который вызвается один раз в программе, выглядит длиннее, чем аналогичный специализированный у вас. Имхо, недостаточно, чтоб называть библиотеку неудобной.

В четвертый раз. Я не доказываю, что библиотека плохая. Говорю, что по первому впечатлению мне показалось сложной. Если вы можете привести код, скажу спасибо, нет так нет, самому заниматься нет ни времени ни желания.

J>>>Если в вашем проекте именно этот фильтр так важен, то я не вижу проблем завернуть его в простейшую функцию

Ytz>>Так зачем мне библиотека которую придется всю оборачивать чтобы удобно было пользоваться?
J>Любую универсальную библиотеку приходится оборачивать для удобной работы с ней в условиях конкретного проекта.
J>Если это не велосипед, который написан специально для конкретного проекта.

В чем заточенность моего велосипеда?

J>Конкретно этой библиотекой — ни разу не использовал, так что опасаюсь писать в стиле "не читал, но осуждаю".


Поэтому пишу в стиле "не читал, но нахваливаю". Правильно?

Ytz>>>>>>P.S. А еще он вывод красиво раскрашивает

J>>>>>Кто? Где? Консольный вывод вставляет терминальные ЕSC-последовательности, что ли?
Ytz>>>>Это под Unix консоль, причем не под каждой будет работать одинаково, не говоря уже о том, что под Windows работать не будет вообще.
J>>>понятия не имею, как раскрашивается консоль в винде.
J>>>В этом и состоит тайное знание, которого не заюзать в буст.лог?
J>Так что там с раскраской-то?

А что с ней? Конкретный вопрос зададите, получите конкретный ответ. Пока только скажу, что с ней все хорошо.

Ytz>>Хотите верьте, хотите нет, но я очень хочу юзать Boost.Log чтобы не плодить своих велосипедов, но похоже что данная библиотека по соображениям простоты и удобства не подойдет.

J>Что ж вы не написали ревью в мейл-лист, когда шло обсуждение библиотеки, если есть какие-то конкретные претензии?

Увы не слежу.

J>Но, в принципе, ничто не мешает написать его сейчас — автор библиотеки, скорее всего, прислушается к пожеланиям, если они действительно стоящие.


Разумно. Но к сожалению сейчас не до этого.

Вообще что-то я уже стал терять нить беседы.
Re[12]: В boost утвердили логгер Boost.Log by Andrey Semashe
От: jazzer Россия Skype: enerjazzer
Дата: 30.03.10 13:10
Оценка:
Здравствуйте, Ytz, Вы писали:

J>>>>Да, я считаю, что прежде чем высказываться относительно библиотеки, неплохо хотя бы документацию прочитать.


Ytz>Не обязательно съедать ведро некой субстанции, для определения чем это является. Ни в коем случае не про Boost.Log

И про что же тогда? Не стесняйтесь, прошу вас.

J>>Ну пока что я увидел единственный пример, где однострочный код, который вызвается один раз в программе, выглядит длиннее, чем аналогичный специализированный у вас. Имхо, недостаточно, чтоб называть библиотеку неудобной.

Ytz>В четвертый раз. Я не доказываю, что библиотека плохая. Говорю, что по первому впечатлению мне показалось сложной. Если вы можете привести код, скажу спасибо, нет так нет, самому заниматься нет ни времени ни желания.
В четвертый(?) раз — вы же сами и привели код с установкой фильтра по значимости сообщения. Что там, что тут — одна строчка.
Это действительно радикальное отличие, которое делает буст.лог не подходящим "по соображениям простоты и удобства"?

J>>Любую универсальную библиотеку приходится оборачивать для удобной работы с ней в условиях конкретного проекта.

J>>Если это не велосипед, который написан специально для конкретного проекта.
Ytz>В чем заточенность моего велосипеда?

Ну, например, в том, что он фильтрует именно по уровню сообщения, а не по подсистеме, аспекту, бизнес-линии или еще по чему-нибудь, что может прийти в голову разработчику конкретного приложения.
Потому что в вашем приложении, видимо, это просто не нужно.
Это и есть заточенность.
Универсальная библиотека не может себе позволить навязывать пользователю, что важно, а что нет.
Она предоставляет универсальные инструменты для всего, будь то уровень или еще что угодно.

J>>Конкретно этой библиотекой — ни разу не использовал, так что опасаюсь писать в стиле "не читал, но осуждаю".

Ytz>Поэтому пишу в стиле "не читал, но нахваливаю". Правильно?
И где я нахваливаю? Я вижу неаргументированную ругань про "не все так радужно" и прошу аргументировать. Это нахваливание?

Ytz>>>>>>>P.S. А еще он вывод красиво раскрашивает

J>>>>>>Кто? Где? Консольный вывод вставляет терминальные ЕSC-последовательности, что ли?
Ytz>>>>>Это под Unix консоль, причем не под каждой будет работать одинаково, не говоря уже о том, что под Windows работать не будет вообще.
J>>>>понятия не имею, как раскрашивается консоль в винде.
J>>>>В этом и состоит тайное знание, которого не заюзать в буст.лог?
J>>Так что там с раскраской-то?

Ytz>А что с ней? Конкретный вопрос зададите, получите конкретный ответ. Пока только скажу, что с ней все хорошо.

Я задал конкретный вопрос про ЕSC-последовательности, вы сказали, что под виндой это работать не будет, там (видимо) нужно совсем другое. Судя по интонации — нечто такое, что буст.логу и не снилось.
Конкретный вопрос — что именно?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[13]: В boost утвердили логгер Boost.Log by Andrey Semashe
От: Ytz https://github.com/mtrempoltsev
Дата: 30.03.10 13:41
Оценка:
Здравствуйте, jazzer, Вы писали:

J>>>Ну пока что я увидел единственный пример, где однострочный код, который вызвается один раз в программе, выглядит длиннее, чем аналогичный специализированный у вас. Имхо, недостаточно, чтоб называть библиотеку неудобной.

Ytz>>В четвертый раз. Я не доказываю, что библиотека плохая. Говорю, что по первому впечатлению мне показалось сложной. Если вы можете привести код, скажу спасибо, нет так нет, самому заниматься нет ни времени ни желания.
J>В четвертый(?) раз — вы же сами и привели код с установкой фильтра по значимости сообщения. Что там, что тут — одна строчка.
J>Это действительно радикальное отличие, которое делает буст.лог не подходящим "по соображениям простоты и удобства"?

Видимо прочитать написанное вы не хотите. Извините пятый раз повторять не буду.

J>>>Любую универсальную библиотеку приходится оборачивать для удобной работы с ней в условиях конкретного проекта.

J>>>Если это не велосипед, который написан специально для конкретного проекта.
Ytz>>В чем заточенность моего велосипеда?

J>Ну, например, в том, что он фильтрует именно по уровню сообщения, а не по подсистеме, аспекту, бизнес-линии или еще по чему-нибудь, что может прийти в голову разработчику конкретного приложения.

J>Потому что в вашем приложении, видимо, это просто не нужно.
J>Это и есть заточенность.

Началось словоблудие.

J>>>Конкретно этой библиотекой — ни разу не использовал, так что опасаюсь писать в стиле "не читал, но осуждаю".

Ytz>>Поэтому пишу в стиле "не читал, но нахваливаю". Правильно?
J>И где я нахваливаю? Я вижу неаргументированную ругань про "не все так радужно" и прошу аргументировать. Это нахваливание?

Выглядит нахваливанием ровно настолько, насколько мои фразы выглядят руганью. Хотя нет ваши выглядят больше.

Ytz>>А что с ней? Конкретный вопрос зададите, получите конкретный ответ. Пока только скажу, что с ней все хорошо.

J>Я задал конкретный вопрос про ЕSC-последовательности, вы сказали, что под виндой это работать не будет, там (видимо) нужно совсем другое. Судя по интонации — нечто такое, что буст.логу и не снилось.
J>Конкретный вопрос — что именно?

HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(console, FOREGROUND_BLUE);
Re[14]: В boost утвердили логгер Boost.Log by Andrey Semashe
От: jazzer Россия Skype: enerjazzer
Дата: 30.03.10 14:05
Оценка:
Здравствуйте, Ytz, Вы писали:

J>>>>Любую универсальную библиотеку приходится оборачивать для удобной работы с ней в условиях конкретного проекта.

J>>>>Если это не велосипед, который написан специально для конкретного проекта.
Ytz>>>В чем заточенность моего велосипеда?
J>>Ну, например, в том, что он фильтрует именно по уровню сообщения, а не по подсистеме, аспекту, бизнес-линии или еще по чему-нибудь, что может прийти в голову разработчику конкретного приложения.
J>>Потому что в вашем приложении, видимо, это просто не нужно.
J>>Это и есть заточенность.
Ytz>Началось словоблудие.

Где же это словоблудие, когда я конкретные примеры привожу?
У вас есть еще какая-нибудь фильтрация, кроме как по важности сообщения?
Если еще конкретнее:
Например, у меня прога, кодирующая видео и аудио, и я хочу оттрейсить только аудио — можно у вас это сделать?
Или у меня сетевая прога, и я хочу логировать только сообщения больше 50 байт, где 50 байт — параметр конфига. И/или сообщения для конкртеного айпишника.
Да и вообще, можно на вашей системе логирования написать нечто вроде tcpdump, со всеми его фильтрами?
У меня есть стойкое ощущение, что на буст.логе можно, именно потому, что там предоставлены обобщенные фильтры, которые вам так не понравились, и я примерно представляю, как мне надо будет писать их, чтоб получить функциональность tcpdump. Пичем писать придется совсем немного. Что в вашей библиотеке придется делать, я не представляю, я видел только фильтрацию по важности сообщения. Если есть еще что-то — покажите.
Естественно, за универсальность придется платить "синтаксическим оверхедом", который, как я уже сказал, легко прячется под капот, если в этом есть насущная необходимость в данном приложении. Сама по себе универсальная библиотека практически никогда не может побить велосипед по краткости пользовательского кода, просто потому что нельзя написать универсальную функцию с синтаксисом вызова типа сделать_все(чтоб_работало), и которая бы всех устроила.

Ytz>Выглядит нахваливанием ровно настолько, насколько мои фразы выглядят руганью. Хотя нет ваши выглядят больше.

После вашей фразы про "ведро некой субстанции" последнее замечание выглядит особенно убедительно.

Ytz>
Ytz>HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
Ytz>SetConsoleTextAttribute(console, FOREGROUND_BLUE);
Ytz>

а можно пояснить, как это при использовании в логировании выглядит? как сделать какую-то часть выводимой строчки синим, а остальное — красным?
Т.е. вот я пишу LOG(Debug) << xxx; и хочу, чтоб время у меня было синеньким, уровень Debug — зелененьким, а сам текст сообщения — желтеньким.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[15]: В boost утвердили логгер Boost.Log by Andrey Semashe
От: Ytz https://github.com/mtrempoltsev
Дата: 30.03.10 17:29
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Где же это словоблудие, когда я конкретные примеры привожу?

J>У вас есть еще какая-нибудь фильтрация, кроме как по важности сообщения?
J>Если еще конкретнее:
J>Например, у меня прога, кодирующая видео и аудио, и я хочу оттрейсить только аудио — можно у вас это сделать?
J>Или у меня сетевая прога, и я хочу логировать только сообщения больше 50 байт, где 50 байт — параметр конфига. И/или сообщения для конкртеного айпишника.

J>Да и вообще, можно на вашей системе логирования написать нечто вроде tcpdump, со всеми его фильтрами?

J>У меня есть стойкое ощущение, что на буст.логе можно, именно потому, что там предоставлены обобщенные фильтры, которые вам так не понравились, и я примерно представляю, как мне надо будет писать их, чтоб получить функциональность tcpdump. Пичем писать придется совсем немного. Что в вашей библиотеке придется делать, я не представляю, я видел только фильтрацию по важности сообщения. Если есть еще что-то — покажите.
J>Естественно, за универсальность придется платить "синтаксическим оверхедом", который, как я уже сказал, легко прячется под капот, если в этом есть насущная необходимость в данном приложении. Сама по себе универсальная библиотека практически никогда не может побить велосипед по краткости пользовательского кода, просто потому что нельзя написать универсальную функцию с синтаксисом вызова типа сделать_все(чтоб_работало), и которая бы всех устроила.

Словоблудие здесь в том, что вы приводите примеры специализированных систем, называя их универсальными. Boost.Log перечисленное вами умеет? Мой нет, поддерживает только иерархические логи при помощи эффектора Sub.

Ytz>>Выглядит нахваливанием ровно настолько, насколько мои фразы выглядят руганью. Хотя нет ваши выглядят больше.

J>После вашей фразы про "ведро некой субстанции" последнее замечание выглядит особенно убедительно.

Где там написано что это про Boost.Log? Врете стало быть?

J>а можно пояснить, как это при использовании в логировании выглядит? как сделать какую-то часть выводимой строчки синим, а остальное — красным?

J>Т.е. вот я пишу LOG(Debug) << xxx; и хочу, чтоб время у меня было синеньким, уровень Debug — зелененьким, а сам текст сообщения — желтеньким.

Уровни логирования выводятся с разным цветом из коробки. Цвета менять можно редактированием файла с цветовой схемой. Не выносил в публичный интерфейс, чтобы добиться однообразного вида во всех приложениях.
А вот цвет сообщений меняется с использованием соответствующего манипулятора или эффектора:
LOG(Error) << Color(RED) << "Хватит толочь" << Color(WHITE) << Backgroung(BLUE) << "воду" << DefaultColors << "в ступе!";
Re[16]: В boost утвердили логгер Boost.Log by Andrey Semashe
От: jazzer Россия Skype: enerjazzer
Дата: 31.03.10 01:01
Оценка:
Здравствуйте, Ytz, Вы писали:

Ytz>Здравствуйте, jazzer, Вы писали:


J>>Где же это словоблудие, когда я конкретные примеры привожу?

J>>У вас есть еще какая-нибудь фильтрация, кроме как по важности сообщения?
J>>Если еще конкретнее:
J>>Например, у меня прога, кодирующая видео и аудио, и я хочу оттрейсить только аудио — можно у вас это сделать?
J>>Или у меня сетевая прога, и я хочу логировать только сообщения больше 50 байт, где 50 байт — параметр конфига. И/или сообщения для конкртеного айпишника.

J>>Да и вообще, можно на вашей системе логирования написать нечто вроде tcpdump, со всеми его фильтрами?

J>>У меня есть стойкое ощущение, что на буст.логе можно, именно потому, что там предоставлены обобщенные фильтры, которые вам так не понравились, и я примерно представляю, как мне надо будет писать их, чтоб получить функциональность tcpdump. Пичем писать придется совсем немного. Что в вашей библиотеке придется делать, я не представляю, я видел только фильтрацию по важности сообщения. Если есть еще что-то — покажите.
J>>Естественно, за универсальность придется платить "синтаксическим оверхедом", который, как я уже сказал, легко прячется под капот, если в этом есть насущная необходимость в данном приложении. Сама по себе универсальная библиотека практически никогда не может побить велосипед по краткости пользовательского кода, просто потому что нельзя написать универсальную функцию с синтаксисом вызова типа сделать_все(чтоб_работало), и которая бы всех устроила.

Ytz>Словоблудие здесь в том, что вы приводите примеры специализированных систем, называя их универсальными. Boost.Log перечисленное вами умеет? Мой нет, поддерживает только иерархические логи при помощи эффектора Sub.


Вы меня не поняли, либо я непонятно выражаюсь, что скорее всего. Заранее прошу меня извинить.

Я привожу примеры специализированных систем, в которых я хочу иметь специализированный логгинг.
Но построить этот логгинг я хочу с помощью одного и того же универсального инструмента, чтоб не писать в каждом свой велосипед с нуля.
Буст.Лог, судя по фичам и интерфейсу, вполне на роль универсального инструмента может претендовать, с его помощью, похоже, можно построить такую систему, и, как я уже сказал выше, я даже примерно представляю, как, и это "как" обещает быть весьма несложным, опять же из документации.
У нас в проекте сейчас есть свой велосипед, и он нас вполне устраивает, но с его помощью такую систему не построить, он не универсален, придется кучу всего переписывать/дописывать. У вас свой велосипед, который вполне устраивает вас. Вопрос — с помощью вашего велосипеда можно реализовать все выше? Если да, то как?
Если ваш ответ — "Нет, потому что мне это не нужно и лень огород городить" (например, в моем случае ответ будет именно таким) — это и есть заточенность под ваши задачи.
В этом нет проблемы, в этом слабость (ограниченность фич) и сила (то, что нужно, выражается крайне просто) любого велосипеда. Просто нужно отдавать себе в этом отчет и не подходить с велосипедными мерками к универсальной библиотеке.

Ytz>>>Выглядит нахваливанием ровно настолько, насколько мои фразы выглядят руганью. Хотя нет ваши выглядят больше.

J>>После вашей фразы про "ведро некой субстанции" последнее замечание выглядит особенно убедительно.
Ytz>Где там написано что это про Boost.Log? Врете стало быть?
Вы так и не ответили, о чем была эта фраза.
Поскольку тут речь идет о вашем велосипеде (который вы, понятно, пробовали) и буст.логе, который вы не пробовали и не собираетесь, то, извините, ваше "это я не про Boost.Log" аналогично "я ни в коем случае не имею в виду лису, но буду бить по наглой рыжей морде".
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[17]: В boost утвердили логгер Boost.Log by Andrey Semashe
От: Ytz https://github.com/mtrempoltsev
Дата: 31.03.10 07:27
Оценка:
Здравствуйте, jazzer, Вы писали:

J>В этом нет проблемы, в этом слабость (ограниченность фич) и сила (то, что нужно, выражается крайне просто) любого велосипеда. Просто нужно отдавать себе в этом отчет и не подходить с велосипедными мерками к универсальной библиотеке.


Теперь я понял. Благодарю за терпеливое объяснение.

Ytz>>>>Выглядит нахваливанием ровно настолько, насколько мои фразы выглядят руганью. Хотя нет ваши выглядят больше.

J>>>После вашей фразы про "ведро некой субстанции" последнее замечание выглядит особенно убедительно.
Ytz>>Где там написано что это про Boost.Log? Врете стало быть?
J>Вы так и не ответили, о чем была эта фраза.

ведро некой субстанции == ведро меда
Ок?
Re[2]: В boost утвердили логгер Boost.Log by Andrey Semashev
От: Feonyf  
Дата: 03.04.10 19:04
Оценка:
Здравствуйте, Sni4ok, Вы писали:

S>Здравствуйте, ankorol, Вы писали:


S>скачал исходники, аж 900кб для такой,


900 кб для логгера это слишком
Моя строка построения буста:
.\bjam link=static threading=multi runtime-link=static -j %NUMBER_OF_PROCESSORS% --with-filesystem --with-thread --with-date_time address-model=64
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.