2016-05-11 10 views
0

Ich habe eine Anwendung, die Glog verwendet. Ich kann Umgebungsvariablen oder Gflags verwenden, um das Protokollierungsverzeichnis dieser Anwendung zu ändern. In dieser Anwendung verknüpfe ich eine andere Bibliothek, die auch Glog verwendet. Die Art, wie ich das Verzeichnis der Anwendungsprotokollierung geändert habe, ändert auch nicht das Protokollierungsverzeichnis dieser verknüpften Bibliothek. Weiß jemand, wie man das Log-Verzeichnis von Glog einer verknüpften Bibliothek ändert?Ändern Sie Glog Protokollierungsverzeichnis der verknüpften Bibliothek

EDIT:

In meinem Hauptprogramm für die Anwendung, ich beginne mit:

int main(int argc, char* argv[]) { 
    google::ParseCommandLineFlags(&argc, &argv, true); 
    google::InitGoogleLogging(argv[0]); 
...} 

eine Umgebungsvariable GLOG_log_dir in einen Ordner in meinem Anwendungsverzeichnis festgelegt ist. Ab sofort kann ich mit Sachen wie diese Zeile aus meinem Hauptprogramm starten:

if(!FLAGS_localizer) { 
    LOG(INFO) << "Localizer not initialized. To initialize, use parameter -localizer"; 
} 

Als ich zu meinem angegebenen Protokollordner gehen, ich eine Datei wie gui.engr2-13-197-dhcp.int.colorado.edu.username.log.INFO.20160511-124903.19677 sehe, die alle LOG(INFO) Anrufe in meiner Anwendung enthält. Jetzt habe ich eine verbundene Bibliothek (eine Kommunikationsteilschicht), die Glog-Aufrufe enthält, und diese Aufrufe werden alle korrekt in dieselbe ..log.INFO... Datei geschrieben, die ich oben betrachten konnte. Da die Protokollierung von verschiedenen Dateien kommt, sieht die Protokolldatei wie folgt aus:

I0511 12:49:03.570866 1955471360 gui.cpp:31] Localizer not initialized. To initialize, use parameter -localizer 

von meinem Hauptprogramm und wie folgt aus:

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 

aus meiner verknüpften Bibliothek, die funktioniert. Ich habe eine andere verbundene Bibliothek (die das Problem verursacht), die in cmake auf die gleiche Weise wie die funktionierende verbundene Bibliothek verknüpft ist, außer seine Glog-Aufrufe werden überhaupt nicht in diese Protokolldatei geschrieben. Ich würde erwarten, dass sie ähnlich aussehen, aber den Header [IO511 <time> Localizer.cpp:<lineNo>] haben, anstatt mit "Node.cpp" (Node ist die funktionierende verbundene Bibliothek). Zum Beispiel verwende ich meine (ohne Funktion) verknüpfte Bibliothek einen Localizer wie diese zu initialisieren:

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."; 
} 

Ich habe versucht, das Protokollverzeichnis für dieses bestimmte Objekt manuell eingestellt, aber die Linien sind kommentiert, weil es nicht tat irgendeinen Effekt haben. Ich weiß, dass dieser Konstruktor aufgerufen wird, weil ich es in meiner Anwendung Header-Datei wie folgt aufrufen:

Localizer m_Localizer; 

Aber die LOG(INFO) << "New Localizer created."; kann nicht überall in den Protokolldateien gefunden werden, die erstellt werden. Also meine Frage ist, wie bekomme ich diese-Bibliothek, um seine Glog-Anweisungen auf die gleiche Datei wie der Rest der Anwendung ausgeben? Ich habe auch die Quelle für jede verbundene Bibliothek gekämmt und fand keine Unterschiede in wie Glog enthalten und verwendet wird. In beiden wird #include <glog/logging.h> aufgerufen, und dann werden Glog LOG(<severity>) Aufrufe sofort verwendet.

+0

Was haben Sie bisher versucht? Bitte poste deinen Code und wir helfen dir gerne weiter! –

+0

Darüber hinaus sagt alles Glog ist, dass standardmäßig alle Protokolldateien in ein temporäres Verzeichnis schreiben, aber wenn ich durch meine Glog-Quelle schaue, erscheinen keine Verzeichnisse, die ich finden kann. Und das Hinzufügen des Flags --logtostderr = 1 ändert nicht die Tatsache, dass meine verlinkte Bibliothek nicht an den gleichen Ort wie der Rest meiner Anwendung schreibt. – cosa0481

Antwort

0

Es stellte sich heraus, dass dies ein Problem mit der Art, wie QtCreator Abhängigkeiten behandelt. Es hat die Bibliotheken nicht zum richtigen Verzeichnis gebaut, als ich sie aktualisiert habe, also wurde die ausführbare Datei nie mit den Glog-Anweisungen erstellt.