Как добавить консоль (stdout) в качестве приемника в g3log?

Я новичок в g3log. Я скомпилировал и запустил один из примеров, которые я нашел в репозитории, но не смог изменить его, чтобы печатать сообщения журнала на консоль, а не в файл.
Следующие строки из примера устанавливают регистратор:

   auto worker = g3::LogWorker::createLogWorker();
auto handle= worker->addDefaultLogger(argv[0], path_to_log_file);
g3::initializeLogging(worker.get());

Где строка в середине устанавливает префикс журнала и указывает путь, где должен быть создан файл журнала.
Как я могу изменить этот код для печати на консоли \ и на консоли, и в файле?

Спасибо,

Омер.

1

Решение

из g3log github для реализации цветного вывода консоли вам нужно:

struct ColorCoutSink {

// Linux xterm color
// http://stackoverflow.com/questions/2616906/how-do-i-output-coloured-text-to-a-linux-terminal

enum FG_Color {YELLOW = 33, RED = 31, GREEN=32, WHITE = 97};

FG_Color GetColor(const LEVELS level) const
{
if (level.value == WARNING.value) { return YELLOW; }
if (level.value == DEBUG.value) { return GREEN; }
if (g3::internal::wasFatal(level)) { return RED; }

return WHITE;
}

void ReceiveLogMessage(g3::LogMessageMover logEntry)
{
auto level = logEntry.get()._level;
auto color = GetColor(level);

std::cout << "\033[" << color << "m" << logEntry.get().toString() << "\033[m" << std::endl;
}
};

// in main.cpp, main() function

auto sinkHandle = logworker->addSink(std::make_unique<CustomSink>(),
&CustomSink::ReceiveLogMessage);

Таким образом, если вы удалите цветные «вещи», регистратор выведет на консоль

0

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

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

class CustomSink {
public:
void forwardLogToStdout(g3::LogMessageMover logEntry) {
std::cout << logEntry.get().message() << std::endl;
}
};

Итак, в вашем коде вам нужно только заменить worker-> addDefaultLogger (…) следующим фрагментом:

auto handle = worker->addSink(std::make_unique<CustomSink>(), &CustomSink::forwardLogToStdout);

1

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