log4cplus2.0之Hello world程序

這是 log4cplus 2.0及之後版本的最簡單的示例,內容來自:https://sourceforge.net/p/log4cplus/wiki/CodeExamples/

程序如下:

#include <log4cplus/logger.h>
#include <log4cplus/loggingmacros.h>
#include <log4cplus/configurator.h>
#include <log4cplus/initializer.h>

int main()
{
    // Initialization and deinitialization.
    log4cplus::Initializer initializer;

    //log4cplus::PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("log4cplus.properties"));    
    log4cplus::BasicConfigurator config;
    config.configure();

    log4cplus::Logger logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("main"));
    LOG4CPLUS_WARN(logger, LOG4CPLUS_TEXT("Hello, World!"));
    return 0;
}

這份代碼將在在控制檯輸出:WARN - Hello, World!,下面內容將分析這份代碼。

首先是頭文件:

頭文件 在代碼中的解釋
log4cplus/logger.h
  • 提供了Logge 類
  • Logger類實例是一個可命名的句柄
  • Logger句柄在記錄日誌的時候回用到
log4cplus/loggingmacros.h

聲明瞭用來記錄日誌的宏,這些宏的等級有六個FATAL, ERROR, WARN, INFO, DEBUG, TRACE。例如WARN的宏的名爲LOG4CPLUS_WARN( )。

log4cplus/configurator.h

提供了有關log4cplus配置的類:

  • PropertyConfigurator 引用外部文件進行配置
  • BasicConfigurator 使用快速配置
  • ConfigureAndWatchThread
log4cplus/initializer.h 文件內聲明瞭Initializer類,這個類可以初始化log4plus。

main函數的代碼剖析:

log4cplus::Initializer initializer;
  • 這行代碼創建了一個Initializer實例,這麼做會對log4cplus內部進行初始化。
  • 如果不使用Initializer實例對logcplus進行初始化,程序不能正常工作至結束。
  • 這個類可以被實例化多次。
  • Initializer類維護着一個引用計數器。當引用計數器爲0,且最後的Initializer實例被銷燬時,log4cplus的內部構件將會被停止工作。
  • log4cplus被關停後,將無法再重新初始化。不管怎樣,main函數退出後,我們無法繼續使用logcplus。
//log4cplus::PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT ("log4cplus.properties"));
log4cplus::BasicConfigurator config;
config.configure();
  • 上面這兩行代碼將root logger配置爲ConsoleAppender和SimpleLayout,也就是說用SimpleLayout的格式輸出到控制檯。
  • 如果想使用配置文件來配置屬性,可以用註釋的代碼代替這兩行代碼,doConfigure函數的參數爲配置文件路徑名稱。
log4cplus::Logger logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("main"));
  • 這行代碼的作用是獲得一個logger句柄,並將這個句柄命名爲“main”。
  • 宏LOG4CPLUS_TEXT( )的作用和windows的宏TEXT( )或_T( )的作用一樣。也就是說,如果定義了預處理器符號UNICODE,這個宏會在字符串字符串前添加前綴 ‘ L ’,表示字符串被轉化成了16位表示的寬字符(使用Unicode來編碼)。例如"abc"是ANSI字符串,用3個字節表示,而L"abc"是unicode字符串,用6個字節表示。
LOG4CPLUS_WARN(logger, LOG4CPLUS_TEXT("Hello, World!"));
  • 這裏調用了宏LOG4CPLUS_WARN( ),將日誌消息“Hello, World!”使用句柄logger進行輸出。
  • 這個日誌消息將由main logger傳播到root logger,然後通過控制檯被打印出來
  • 在logcplus內部,這個宏使用C++的string stream來格式化日誌消息“Hello, World!”,這表示我們可以使用所有的C++標準流。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章