這是 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 |
|
log4cplus/loggingmacros.h |
聲明瞭用來記錄日誌的宏,這些宏的等級有六個FATAL, ERROR, WARN, INFO, DEBUG, TRACE。例如WARN的宏的名爲LOG4CPLUS_WARN( )。 |
log4cplus/configurator.h |
提供了有關log4cplus配置的類:
|
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++標準流。