braintag

公開してしまう備忘録

VisualStudio(VC9) でロギングライブラリgoogle-glogを使ってみる

log4cxxを使おうと思ったのだけれども、設定が煩雑だし、オーバースペック気味と感じたので、
簡単そうなgoogle-glogを使ってみる。

1.ダウンロード

以下のサイトからダウンロード
http://code.google.com/p/google-glog/

glog-0.3.1.tar.gzを解凍するとこんな感じ

自分は、"d:\lib"以下に解凍しました。以後はそれ前提で読んでください。

2.glogをVisualStudioでビルドする

このファイルの中から、"google-glog.sln"をダブルクリックして、VisualStudioで開く。

するとこんな感じでプロジェクトが入ってます。

とりあえず、おもむろにlibglogをリリースビルド。

"d:\lib\glog-0.3.1\Release"に、DLLとLibが出来る。


準備は完了。

3.glogをコンソールアプリから使用してみる

まずは、VisualStudioでglogを使用するための設定

メニュー->ツール->オプション->プロジェクトおよびソリューション->VC++ディレクトリ
で、インクルードファイルに"d:\lib\glog-0.3.1\src\windows"を追加

次に、ライブラリファイルに、"d:\lib\glog-0.3.1\Release"を追加


メニュー->ファイル->新しいプロジェクトを追加。
コンソールアプリ"testglog"を作って試してみる。


testglogの構成プロパティ->全般で、文字セットを"マルチバイト文字セットを使用する"に変更

testglogの構成プロパティ->リンカ->入力->追加の依存ファイルに、"libglog.lib"を追加

ソースはこれ

#include "stdafx.h"

#include <glog/logging.h>

int _tmain(int argc, _TCHAR* argv[])
{
     google::InitGoogleLogging(argv[0]);
     LOG(ERROR) << "test log error";
     LOG(INFO) << "test log info";
	 return 0;
}

そしてコンパイル。

実行結果は以下の通り

windowsプログラミングしようとすると、(MFCとか)だと、以下のエラーが出てコンパイルできない。

1>c:\lib\glog-0.3.1\src\windows\glog\log_severity.h(51) : error C2059: 構文エラー : '定数'
1>c:\lib\glog-0.3.1\src\windows\glog\log_severity.h(60) : error C2065: 'NUM_SEVERITIES' : 定義されていない識別子です。
1>c:\lib\glog-0.3.1\src\windows\glog\logging.h(1125) : error C2065: 'NUM_SEVERITIES' : 定義されていない識別子です。

その場合は、

#undef ERROR
#include <glog/logging.h>

で回避する。

以上です。細かい使い方はもっといいサイトあるのでここではVisualStudioでglogを使用するまでだけ書きました。

追記


VisualStudio2008+MFCでglogを使い倒すべくがんばってみたのですが、オプション指定がうまくいきません。(デフォルトでしか動作しない状態)
環境変数を入れると設定が無視されるどころか、動作自体しなくなるし、gflagsはまともに動作しないしで、
("ERROR: unknown command line flag 'stderrthreshold'"って表示されてしまう)
使いものにならないため、glogの使用を諦めました。
自分の力不足です。
おとなしくlog4cxxに戻ります。

さらに追記


あきらめきれずいろいろ調査したところ、
VC環境でgflagsを有効にしたい場合、
configureが使えないので"\src\windows\config.h"を手動で変更しなければいけないみたいです。

#undef HAVE_LIB_GFLAGS#define HAVE_LIB_GFLAGS

しかし、コンパイルエラーで詰んでいる状態です。

1>vlog_is_on.cc
1>c:\lib\glog-0.3.1\src\vlog_is_on.cc(53) : error C2874: using 宣言によって 'fLI::FLAGS_v' の多重宣言が発生します。
1>        c:\lib\glog-0.3.1\src\vlog_is_on.cc(53) : 'fLI::FLAGS_v' の宣言を確認してください。

公式のgoogle-glogグループでも同じ質問がありますけど、放置状態なので
もうさすがに諦めます。

往生際が悪いがさらに追記してなんとか成功

logging.h 85行目で、gflagsが"#if 0"で無条件に無効化されていたため、これを有効にしたところ、コンパイルが成功!

//#if 0
#ifdef HAVE_LIB_GFLAGS
#include <gflags/gflags.h>
#endif

やっと使えるようになりました。長い道のりだったわー。

追記:やっぱり使用中止


Windowsだからなのかマルチスレッド環境だからなのかなんなのかわかりませんが、
大量のメモリリークを起こすので、使用を中止しました。もうこれ以上は手におえません。