LINUX.ORG.RU

c++ библиотека для простого логгирования в stdout

 , ,


1

2

Добрый день! Я в качестве хобби поковыриваю c++ и понадобилась мне очень небольшая библиотека для логгирования - только в stdout, вывод в файлы не нужен. Что хочется видеть в логе - имя файла, имя функции, текущее время (epoch вполне достаточно), идеально какое то имя треда. Из того что пробовал - boost.log монструозен как зависимостями так и функционалом, это лютый оверхед для меня. Писать свои макросы не думаю что надо, не я же первый кому нужна подобная библиотека.

А чем не устраивает

#define MAKE_FUNC_NAME(func) #func

#ifndef NDEBUG
your_log_function(file_name, MAKE_FUNC_NAME(foo))
#endif

Реализация your_log_function уже может ограничиваться только твоей фантазией.

Или надо не настолько минималистично?

snake266 ★★
()
Последнее исправление: snake266 (всего исправлений: 2)
class Application
{
     template<typename... Values>
     static void debug(const char* format, Values && ... vals)
     {
          if(_debug == DebugLevel::Console)
          {
                const std::lock_guard<std::mutex> lock(_logging);
                fprintf(stderr, "[debug]\t");
                fprintf(stderr, format, (vals)...);
                fprintf(stderr, "\n");
          }
          else
          if(_debug == DebugLevel::SyslogDebug)
                syslog(LOG_DEBUG, format, (vals)...);
     }
};

с++ с православным fprintf и syslog меня часто выручал… быстрее ничего нет.

anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 1)

имя файла

__FILE__

имя функции

__func__

(если что есть еще и __LINE__)

текущее время (epoch вполне достаточно)

time_t rawtime = time(NULL);

какое то имя треда

pthread_t pthread_self(void);
pid_t gettid(void);
thrd_t thrd_current(void);
olelookoe ★★★
()