2016-12-15 8 views
1

Я использую регистратор Google (GLog) в C++ проект, где исходный код содержит распечатку информационных элементов и прогресса:Как я могу отправить как Google Logger, так и cout?

std::cout << some_useful_stuff << "\n"; 

И я могу использовать GLog войти информационные элементы:

LOG(INFO) << some_useful_stuff << "\n"; \\ gets echoed to stdout 

Я не могу изменить все операторы std::cout всюду по кодовой базе (поскольку я использую некоторые подпоры от третьих лиц и т. Д., И не смог добавить свои собственные заявления о регистрации для них), это мешает мне использовать if-else конструкции (которая была бы уродливой в любом случае, wra pping каждый оператор вывода в логике).

Итак, как я мог реплицировать stdout выходы на GLog?

std::cout << some_useful_stuff << "\n"; \\ message also goes to LOG(INFO) 

Возможно полезно: мне действительно не нужно, чтобы это происходило одновременно; полезно иметь такой выбор, как {CONSOLE, LOGS, BOTH}, но я мог бы согласиться с более простым выбором между {CONSOLE, LOGS}.

Также - опытный программист, но новичок C++, так что если это мега простой; извинения - и спасибо заранее!

+0

Спасибо за редактирование @Borgleader ... избили меня до этого изменения;) – thclark

+0

[boost: : iostreams :: tee_device] (http://www.boost.org/doc/libs/1_60_0/libs/iostreams/doc/functions/tee.html) полезны для одновременной записи в два потока. В основном обертка для двух потоков. – AndyG

ответ

0

Не уверен в glog, но обычно мы используем системный вызов dup2 для перенаправления вывода одного обработчика файла на другой.

См., Например, в вашем случае, чтобы все std :: cout записывали в файл журнала, используемый glog, только делают

dup2 (glog_file_handler, stdout);

Это будет работать, если вы можете каким-то образом получить файл дескриптора файла журнала, в который записывается глюк. Для получения дополнительной информации см. http://man7.org/linux/man-pages/man2/dup.2.html.

Надеюсь, это поможет.

P.S. Это не сработает, если ваша программа имеет несколько потоков/procesess, записывающих в тот же файл glog, и если glog выполняет синхронизацию записи в файл журнала

+0

Спасибо @ A.N. glog пишет асинхронно; но я изо всех сил пытаюсь найти обработчик файлов в библиотеке google! Я буду исследовать дальше. – thclark