У меня есть приложение, которое использует Glog. Я могу использовать переменные среды или Gflags, чтобы изменить каталог журналов этого приложения. В этом приложении я ссылаюсь на другую библиотеку, которая также использует Glog. То, как я изменил каталог ведения журнала приложения, также не меняет каталог ведения журнала этой связанной библиотеки. Кто-нибудь знает, как изменить каталог ведения журнала Glog связанной библиотеки?
РЕДАКТИРОВАТЬ:
В моем основном исполняемом файле приложения я начинаю с:
int main( int argc, char* argv[] ) {
google::ParseCommandLineFlags(&argc, &argv, true);
google::InitGoogleLogging(argv[0]);
...}
Переменная окружения GLOG_log_dir установлена в папку в каталоге моего приложения. Сразу же я могу начать использовать такие вещи, как эта строка из моего основного исполняемого файла:
if(!FLAGS_localizer) {
LOG(INFO) << "Localizer not initialized. To initialize, use parameter -localizer";
}
Когда я захожу в указанную папку журнала, я вижу файл типа gui.engr2-13-197-dhcp.int.colorado.edu.username.log.INFO.20160511-124903.19677
, который содержит все вызовы LOG(INFO)
в моем приложении. Теперь у меня есть одна связанная библиотека (коммуникационный подуровень), которая содержит вызовы Glog, и все эти вызовы правильно записаны в тот же файл ..log.INFO...
, который я мог посмотреть выше. Так как логирование идет из разных файлов, лог-файл выглядит так:
I0511 12:49:03.570866 1955471360 gui.cpp:31] Localizer not initialized. To initialize, use parameter -localizer
из моего основного исполняемого файла и вот так:
I0511 12:49:08.030144 1955471360 Node.cpp:1050] Found 1 URLs for nodes
I0511 12:49:08.030184 1955471360 Node.cpp:1057] node at 10.201.13.197:5555
I0511 12:49:08.030200 1955471360 Node.cpp:1085] Connecting to 10.201.13.197:5555
I0511 12:49:08.030308 1955471360 Node.cpp:1095] 'MochaGui' connected to remote node: 10.201.13.197:5555
из моей связанной библиотеки, которая работает. У меня есть другая связанная библиотека (вызывающая проблему), которая связана в cmake так же, как и рабочая связанная библиотека, за исключением того, что ее вызовы Glog вообще не записываются в этот файл журнала. Я ожидаю, что они будут выглядеть одинаково, но иметь заголовок [IO511 <time> Localizer.cpp:<lineNo>]
, а не то же самое с «Node.cpp» (Node — это рабочая связанная библиотека). Например, я использую свою (нерабочую) связанную библиотеку для инициализации Localizer следующим образом:
Localizer::Localizer()
{
//FLAGS_log_dir = "/Users/username/Documents/ARPGDependencies/MochaGui/logs";
//google::InitGoogleLogging("Localizer");
m_bIsStarted = false;
m_pNode = new node::node;
m_pNode->init("commander_node");
if( m_pNode->advertise("command") == false ){
LOG(ERROR) << "Error setting up publisher.";
}
LOG(INFO) << "New Localizer created.";
}
Я попытался вручную установить каталог журнала для этого конкретного объекта, но эти строки закомментированы, потому что это не имело никакого эффекта. Я знаю, что этот конструктор вызывается, потому что я вызываю его в заголовочном файле моего приложения следующим образом:
Localizer m_Localizer;
Но LOG(INFO) << "New Localizer created.";
нельзя найти нигде в создаваемых файлах журнала. Итак, мой вопрос: как мне заставить эту библиотеку выводить свои операторы Glog в тот же файл, что и остальная часть приложения? Я также просмотрел исходный код для каждой связанной библиотеки и не нашел различий в том, как Glog включается и используется. В обоих вызывается #include <glog/logging.h>
, а затем сразу же используются вызовы Glog LOG(<severity>)
.