Я работаю над многопоточным приложением, критичным к производительности. Посмотрел логи rlog, Ace и Boost. Я выбрал rlog, потому что считал, что он самый быстрый (когда ведение журнала отключено, накладные расходы меньше всего).
У меня проблема в том, что он показывает имя файла, номер строки и т. Д. Даже в режиме выпуска. Если вы скажете мне, как отключить эту информацию, моя проблема может быть решена. В любом случае, какой регистратор на C ++ является наиболее эффективным в моей ситуации?
Ответы:
К сожалению, в настоящее время я не могу проголосовать против. Насколько я могу сказать, никогда не используйте такую ерунду, как Apache log4cxx. В нем есть серьезные ошибки.
На мой взгляд, стоит пойти с наддувом.
источник
Pantheios считается самой производительной библиотекой журналов C ++ , а также претендует на то, чтобы быть единственной, которая на 100% безопасна по типу (см. Эту статью о связанной библиотеке, объясняющей, почему библиотеки на основе printf () / iostream не являются типобезопасными. Безопасно)
источник
Я добился успеха с log4cxx на http://logging.apache.org/log4cxx/index.html . Это версия популярного логгера Log4j на C ++, которую легко настроить либо с помощью файла conf, либо в коде. Накладные расходы при его отключении минимальны (вызов метода и сравнение целых чисел).
Шаблон для вывода в журнал определяется шаблоном преобразования, который может быть таким простым, как дата / время и сообщение. Он также обрабатывает ограничение размера файла, одновременное нажатие клавиш и т. Д. Вы также можете настроить различные шаблоны для различных ошибок и источников.
источник
Вот как вы можете отключить дополнительную информацию, которую дает rlog (например, имя файла, номер строки и т. Д.). Когда вы инициализируете rlog в своей
main()
функции (или где-то еще), вы можете сделать следующее:rlog::RLogInit(argc, argv); rlog::StdioNode slog (2, rlog::StdioNode::OutputColor); slog.subscribeTo( RLOG_CHANNEL("error") );
Второй аргумент
StdioNode
- это флаги для управления выводом. Ознакомьтесь с документацией по rlog (может быть сгенерирован с помощью Doxygen) для получения полного списка возможных флагов. В приведенном здесь примере rlog только раскрашивает вывод в соответствии с серьезностью, без добавления какой-либо другой информации.источник
Возможно, вы захотите рассмотреть систему входа в систему. logog предлагает именно такую функциональность, но не имеет неявных зависимостей кода, как у Pantheios. logog является потокобезопасным и обеспечивает высокую степень контроля над тем, какие типы сообщений регистрируются в любой момент.
Я автор и сопровождающий logog, поэтому мое мнение немного предвзято. Но я просмотрел rlog, Pantheios и другие системы журналирования перед тем, как внедрить эту.
https://github.com/johnwbyrd/logog .
источник
Некоторые из накладных расходов могут возникать в ваших макросах / потоках. Вам нужно быть очень осторожным, чтобы не составить строку, которая регистрируется, когда ведение журнала отключено.
Умное использование потоков и оператора?: Позволяет делать это, как и макросы.
источник
У Poco хорошая поддержка ведения журнала ...
http://pocoproject.org/slides/110-Logging.pdf
источник
возможно, pantheios,
хотя я не знаю, потокобезопасный он или нет ...
источник
попробуйте библиотеку c-log, https://github.com/0xmalloc/c-log , быструю, стабильную и потокобезопасную библиотеку журналов для языка C / C ++.
источник
#include <pthread.h>
...)