Как включить / отключить ведение журнала spdlog в коде?

Я создаю модули библиотеки C ++ в моем приложении. Для ведения журнала я использую spdlog. Но в производственной среде я не хочу, чтобы мои модули lib делали какие-либо записи. Одним из способов включения / выключения было бы засорять мой код условными выражениями #ifdef, такими как …

#ifdef logging
// call the logger here.
#endif

Я ищу способ избежать написания этих условий. Может быть функцией-оберткой, которая выполняет проверку #ifdef и записывает ее. Но проблема с этим подходом заключается в том, что мне приходится писать оболочки для каждого метода ведения журнала (например, info, trace, warn, error, …)

Есть ли способ лучше?

2

Решение

Я не знаю, spdlog.

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

в «app.h»

#ifndef LOG

#ifdef logging
#define LOG spdlog
#endif

#ifndef logging
#define LOG noop
#endif

#endif

Вы поняли идею?

Это оставит большую часть вашего кода нетронутым

1

Другие решения

Вы можете отключить вход с set_level():

auto my_logger = spdlog::basic_logger_mt("basic_logger", "logs/basic.txt");

#if defined(PRODUCTION)
my_logger->set_level(spdlog::level::off);
#else
my_logger->set_level(spdlog::level::trace);
#endif

spdlog::register_logger(my_logger);
0

По вопросам рекламы [email protected]