2016-05-11 14 views
0

Glogを使用するアプリケーションがあります。環境変数やGflagsを使用して、このアプリケーションのロギングディレクトリを変更することができます。このアプリケーションでは、Glogも使用する別のライブラリにリンクします。私がアプリケーションログのディレクトリを変更した方法は、このリンクされたライブラリのロギングディレクトリも変更しません。誰もリンクされたライブラリのGlogロギングディレクトリを変更する方法を知っていますか?リンクライブラリのGlogロギングディレクトリを変更してください

EDIT:アプリケーションのための私のメインの実行可能で

、私はで始まる:

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

、私は自分のアプリケーション内のすべてのLOG(INFO)呼び出しを含むgui.engr2-13-197-dhcp.int.colorado.edu.username.log.INFO.20160511-124903.19677などのファイルを参照してください。今私はGlog呼び出しを含む1つのリンクされたライブラリ(通信サブレイヤ)を持っており、これらの呼び出しはすべて私が上で見ることができる同じ..log.INFO...ファイルに正しく書き込まれます。働く私のリンクされたライブラリから

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 

:私のメインの実行ファイルから

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

と、このような:ロギングは別のファイルから来ているので、ログファイルは次のようになります。 グログの呼び出しがこのログファイルにまったく書き込まれていないことを除けば、私は作業リンクされたライブラリと同じ方法でcmakeでリンクされている別のリンクライブラリ(問題を引き起こしているもの)を持っています。私はそれらが同様のように見えるが、ヘッダー[IO511 <time> Localizer.cpp:<lineNo>]を、 "Node.cpp"(ノードは動作中のリンクされたライブラリである)と同じではなく、代わりに持つことを期待する。

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>)コールがすぐに使用されます。

+0

これまでに何を試みましたか?あなたのコードを投稿してください、私たちは喜んで助けてくれるでしょう! –

+0

さらにGlogは、デフォルトでは、すべてのログファイルが一時ディレクトリに書き込まれますが、私のGlogソースを見れば、見つけ出すことのできるディレクトリが見つかりません。フラグ-logtostderr = 1を追加しても、リンクされたライブラリが他のアプリケーションと同じ場所に書き込まないという事実は変わりません。 – cosa0481

答えて

0

これは、QtCreatorが依存関係を処理する方法に問題があったことが分かります。私がそれらを更新したときに正しいディレクトリにライブラリを構築していなかったので、最初は実行可能ファイルがGlogステートメントで構築されていませんでした。