log4cplus2.0之Hello world程序

这是 log4cplus 2.0及之后版本的最简单的示例,内容来自:https://sourceforge.net/p/log4cplus/wiki/CodeExamples/

程序如下:

#include 
#include 
#include 
#include 

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++标准流。

你可能感兴趣的:(日志收集系统)