Есть ли библиотека журналов для C? (например, log4j для C)
Я долгое время работал на Java и привык использовать библиотеку log4j для журналов. Это замечательно, и теперь, когда я перехожу на C, я хотел бы узнать, есть ли подобная библиотека для журналов на этом языке.
3 ответа
До сих пор я знаю о следующих библиотеках для регистрации: log4c, sclog4c, syslog, zlog.
log4c
log4c был изобретен как Log4J для C. Если вы специально ищете "что-то вроде Log4J", потому что вы хотите, чтобы он был похож на "Log4J", это, скорее всего, то, что вы ищете.
связи
sclog4c
sclog4c был придуман так просто, как наиболее часто используемые функции java.util.logging
- как можно проще. Если вы ищете "что-то вроде Log4J", потому что хотите, чтобы оно было как можно меньше и проще, скорее всего, это то, что вы ищете.
связи
системный журнал
Первоначально syslog был разработан Эриком Аллманом как часть sendmail и стал стандартом defacto для ведения журналов демона / сервера в средах POSIX. Это клиент-серверный сервер, обычно демон, который хочет, чтобы что-то регистрировалось, отправляет данные журнала на syslogd, прослушивающий UDP-порт 514. Если вы специально ищете "что-то вроде Log4J", потому что вы действительно хотите зарегистрировать демон или сервер, это, скорее всего, то, что вы ищете.
связи
- http://tools.ietf.org/html/rfc5424
- http://man7.org/linux/man-pages/man3/syslog.3.html
- http://en.wikipedia.org/wiki/Syslog
zlog
Этот был изобретен, чтобы быть похожим на log4c, просто - в соответствии с его описанием - меньшим и более гибким одновременно.
связи
Разнообразный
Сила против Бережливости
Из-за различий в том, как С связывает, мыслит и работает, я бы не стал искать каркас для ведения журналов, который в общем случае является мощным - в отличие от Java. Если вы собираетесь использовать "полнофункциональные приложения для настольных компьютеров" и далее, логирование с помощью мощных сред, таких как Java, безусловно, является хорошим способом. Если вы реализуете инструменты командной строки или что-то подобное, я уверен, что лучше интегрированная среда - почему вы хотите зависеть от lib2xml только для ведения журнала...
скорость
В случае скорости соотв. По какой-то причине для вас важно не тратить циклы, поищите каркас ведения логов, который использует макросы для оценки уровня логов до оценки других аргументов.
Недостатком является то, что вы не можете вызвать процедуру журнала с аргументами, которые имеют побочные эффекты. Но это не должно быть в любом случае. Было бы удивительно, если бы операторы журнала не игнорировались из-за побочных эффектов.
Положительным моментом является то, что операторы журнала в такой среде добавляют так мало циклов, что их почти нет - просто доступ к глобальной, проверочной и условной ветвям, пропуская остальную часть кода журнала - 2 инструкции, 1 цикл в лучший случай на многих современных процессорах.
отказ
Я автор sclog4c.
Существует библиотека C log4c, которая имитирует библиотеку Java log4j. Из документации log4c:
Он моделируется после того, как библиотека Log for Java остается настолько близкой к их API, насколько это разумно.
Другой вариант для рассмотрения - zf_log:
- В отладочных версиях ведение журнала отладки сводится к запрету (скомпилировано)
- Аргументы не оцениваются, когда сообщение не зарегистрировано
- Нет "неиспользуемого" предупреждения для переменных, используемых только в операторах журнала
- Зарегистрируйте область памяти как HEX и ASCII
- Дополнительная встроенная поддержка журнала Android и системного журнала Apple (iOS, OS X)
- Пользовательские функции вывода (файл, системный журнал и т. Д.)
Например, это выведет сообщение журнала INFO:
ZF_LOGI("Number of arguments: %i", argc);
Который будет выглядеть так:
04-29 22:43:20.244 40059 1299 I hello.MAIN main@hello.c:9 Number of arguments: 1
Точное представление настраивается и зависит от типа сборки (отладка / выпуск).