[セットトップ]C++オープンソースログライブラリ--Glogの使用

3709 ワード

会社の他の同僚の多くはC#をして、社内はしばらく自分のC++ログライブラリを提供する必要はありません.プロジェクトが緊急なので、オープンソースのログライブラリを選んで使用するつもりです.以前javaをしたことがあるので、ログ4 jは強いですが、調べてみると、その使用は少し複雑です.だから最も偉大な会社googleを思い出して、そのGlogの使用はやはり比較的に簡単で、ソースコードの下で直接VSコンパイルでlibとdllライブラリを生成して、ソースコードのファイルの中ですべて既成のvs工事があります.
オープンソースプロジェクトのトップページ:https://code.google.com/p/google-glog/
Glogプロジェクトパス:https://code.google.com/p/google-glog/downloads/list

最初のステップはglog-0.3をダウンロードします.3.tar.gz、解凍してgoogle-glogを直接開きます.slnエンジニアリングファイルvsバージョンが間違っている場合は自動変換
第2歩、コンパイルして、Debugの下でlibglogを生成します.dll、 libglog.lib、libglog_static.lib
第3歩、ヘッダファイルとlibライブラリを自分の工事の下にコピーして、私はしばらくwindowの下で使うため、ヘッダファイルはglog-0.3を使います.3\src\windows\glog
ステップ4では、自分のプロジェクトの下に引用し、コンパイルしてエラーを発見します.
1>d:\workspace\video\videomanage\devicemgr\lib\glog\glog\log_severity.h(55): fatal error C1189: #error :  ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail.
1>  SessionMgr.cpp
1>d:\workspace\video\videomanage\devicemgr\lib\glog\glog\log_severity.h(55): fatal error C1189: #error :  ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail.
1>  SessionFactory.cpp
1>d:\workspace\video\videomanage\devicemgr\lib\glog\glog\log_severity.h(55): fatal error C1189: #error :  ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail.
1>  RealTimeStreamSession.cpp
1>d:\workspace\video\videomanage\devicemgr\lib\glog\glog\log_severity.h(55): fatal error C1189: #error :  ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail.
1>  main.cpp
1>d:\workspace\video\videomanage\devicemgr\lib\glog\glog\log_severity.h(55): fatal error C1189: #error :  ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail.
1>  GNumGenerator.cpp
1>d:\workspace\video\videomanage\devicemgr\lib\glog\glog\log_severity.h(55): fatal error C1189: #error :  ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail.
1>  DevicControlSession.cpp
1>d:\workspace\video\videomanage\devicemgr\lib\glog\glog\log_severity.h(55): fatal error C1189: #error :  ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail.
1>  CatalogSesssion.cpp
1>d:\workspace\video\videomanage\devicemgr\lib\glog\glog\log_severity.h(55): fatal error C1189: #error :  ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail.

log_へseverity.hヘッダファイルを表示すると、マクロ定義の場所で競合が発生します.
#ifndef GLOG_NO_ABBREVIATED_SEVERITIES
# ifdef ERROR
#  error ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail.
# endif
const int INFO = GLOG_INFO, WARNING = GLOG_WARNING,
  ERROR = GLOG_ERROR, FATAL = GLOG_FATAL;
#endif

解決方法:
エンジニアリングにプリコンパイルマクロGLOG_を付けるNO_ABBREVIATED_SEVERITIES
C/C+-->プリプロセッサ-->プリプロセッサ定義-->GLOG_を付けるNO_ABBREVIATED_SEVERITIESマクロ保存、コンパイル通過~
ステップ5、自分のプロジェクトで使用
#include "glog/logging.h"
int _tmain(int argc, _TCHAR* argv[])
{	
	google::InitGoogleLogging((const char *)argv[0]);  //            

	google::SetLogDestination(google::GLOG_INFO,"./myInfo");

	LOG(INFO) << "This is a <Warn> log message..." << ;


         .....................

}

はい、後でこれらのログを工事で使用します.