log4cplus之基本使用方法及示例

(注:本文基于log4cplus2.0,根据本人的理解进行描述。如有不妥,请务必指正。)

在了解log4cplus之前,我们可以先了解以下log4j的设计方法:一个著名的日志系统是怎么设计出来的?而log4cplus是log4j的C++实现,提供的接口和使用逻辑与log4j基本保持一致。

下面的内容将简单介绍log4cplus并描述其使用方法:开头先了解一些基本的类(Logger、Appender和Layout),然后看看这些类提供了哪些接口,接下来才列出log4cplus的编程步骤,最后给出示例。

文中提及的内容细节可以查阅log4cplus的api文档:log4cplus Documentation

一、基本的类

功能
Logger记录日志的句柄。
Appender用于指定内容输出位置(如:控制台,文件、远程服务器等)。一个Logger可添加多个Appender,从而向多个位置输出日志。
Layout用于指定日志输出的格式。每个Appender需要设置一个Layout。

Logger —— Appender —— Layout的关系图:

 

二、Log4cplus支持的Appender的类型

上图是Appender的继承关系,其中Log4cplus::Appnder是各种Appender的父类。从图中,我们可以获得log4cplus所支持的Appender的类型。

三、Log4cplus支持的Layout的类型

上图是Layout的继承关系,其中Log4cplus::Layout是各种Layout的父类。从图中,我们可以得知Layout的类型有3种,分别为PatternLayout、SimpleLayout和TTCCLayout。其中的PatternLayout可以让用户自定义输出格式。

四、Log4cplus的基本使用步骤:

  1. 创建Appender对象。
  2. 设置Appender的名称和输出格式(Layout)
  3. 获得一个Logger实例,并设置其日志输出等级阈值
  4. 给Logger实例添加Appender
  5. 使用宏输出日志(宏的等级有6个,分别为:FATAL, ERROR, WARN, INFO, DEBUG, TRACE。FATAL宏的名为LOG4CPLUS_FATAL( ),ERROR的宏的名为LOG4CPLUS_ERROR( ),以此类推。具体使用方法见示例。)

注:一个Logger实例被配置后,将一直存在于程序中,在程序的任何地方都通过实例名称获取到这个Logger,不用重新配置

五、示例

之后的内容将通过示例来展示log4cplus的基本使用方法。

例1:将日志输出到控制台

#include <log4cplus/log4cplus.h>

int main()
{
    //用Initializer类进行初始化
    log4cplus::Initializer initializer;

    //第1步:创建ConsoleAppender
    log4cplus::SharedAppenderPtr appender(new log4cplus::ConsoleAppender());

    //第2步:设置Appender的名称和输出格式(SimpleLayout)
    appender->setName(LOG4CPLUS_TEXT("console"));
    appender->setLayout(std::unique_ptr<log4cplus::Layout>(new log4cplus::SimpleLayout));

    //第3步:获得一个Logger实例,并设置其日志输出等级阈值
    log4cplus::Logger logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT ("test"));
    logger.setLogLevel(log4cplus::INFO_LOG_LEVEL);

    //第4步:为Logger实例添加ConsoleAppender
    logger.addAppender(appender);

    //第5步:使用宏将日志输出
    LOG4CPLUS_INFO(logger, LOG4CPLUS_TEXT("Hello world"));

    return 0;
}

运行结果:控制台输出 “INFO - Hello world”

例2:将日志输出到控制台并写入文件

#include <log4cplus/log4cplus.h>

int main()
{
    //用Initializer类进行初始化
    log4cplus::Initializer initializer;

    //第1步:创建ConsoleAppender和FileAppender(参数app表示内容追加到文件)
    log4cplus::SharedAppenderPtr consoleAppender(new log4cplus::ConsoleAppender);
    log4cplus::SharedAppenderPtr fileAppender(new log4cplus::FileAppender(
                                                  LOG4CPLUS_TEXT("log.txt"),
                                                  std::ios_base::app
                                                  )
                                              );

    //第2步:设置Appender的名称和输出格式
    //ConsoleAppender使用SimpleLayout
    //FileAppender使用PatternLayout
    consoleAppender->setName(LOG4CPLUS_TEXT("console"));
    consoleAppender->setLayout(std::unique_ptr<log4cplus::Layout>(new log4cplus::SimpleLayout()));
    fileAppender->setName(LOG4CPLUS_TEXT("file"));
    log4cplus::tstring pattern = LOG4CPLUS_TEXT("%D{%m/%d/%y %H:%M:%S,%Q} [%t] %-5p %c - %m [%l]%n");
    fileAppender->setLayout(std::unique_ptr<log4cplus::Layout>(new log4cplus::PatternLayout(pattern)));

    //第3步:获得一个Logger实例,并设置其日志输出等级阈值
    log4cplus::Logger logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT ("test"));
    logger.setLogLevel(log4cplus::INFO_LOG_LEVEL);

    //第4步:为Logger实例添加ConsoleAppender和FileAppender
    logger.addAppender(consoleAppender);
    logger.addAppender(fileAppender);

    //第5步:使用宏将日志输出
    LOG4CPLUS_INFO(logger, LOG4CPLUS_TEXT("Hello world"));

    return 0;
}

运行结果:控制台输出 “INFO - Hello world”,同时,在目录中生成名称为 “log.txt” 的文件,文件内容为 “12/10/18 09:57:22,288.442 [12040] INFO  test - Hello world [..\logtest\main.cpp:25]”

例3:将日志发送到日志服务器:

#include <log4cplus/log4cplus.h>

int main()
{
    //用Initializer类进行初始化
    log4cplus::Initializer initializer;

    //第1步:创建SocketAppender
    log4cplus::SharedAppenderPtr appender(new log4cplus::SocketAppender(
                                                    LOG4CPLUS_TEXT("localhost"),
                                                    32015, LOG4CPLUS_TEXT("test")));

    //第2步:设置Appender的名称,SocketAppender不需要设置输出格式
    appender->setName(LOG4CPLUS_TEXT("logserver"));

    //第3步:获得一个Logger实例,并设置其日志输出等级阈值
    log4cplus::Logger logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT ("test"));
    logger.setLogLevel(log4cplus::INFO_LOG_LEVEL);

    //第4步:为Logger实例添加Appender
    logger.addAppender(appender);

    //第5步:使用宏将日志输出
    LOG4CPLUS_INFO(logger, LOG4CPLUS_TEXT("Hello world"));

    return 0;
}

例3的结果可以通过搭建一个日志服务器来查看,服务器的示例可以参考:simpleserver目录下的loggingserver.cxx

  • 19
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
首先,需要在项目中引入log4cplus库。具体方法可以在log4cplus的官网上找到相应的下载链接和使用说明。 在项目中使用log4cplus,需要进行以下步骤: 1. 在代码中引入log4cplus的头文件,例如: ``` #include <log4cplus/logger.h> #include <log4cplus/fileappender.h> #include <log4cplus/consoleappender.h> #include <log4cplus/layout.h> ``` 2. 初始化log4cplus,例如: ``` log4cplus::initialize(); ``` 3. 创建logger对象,例如: ``` log4cplus::Logger logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("MyLogger")); ``` 4. 创建appender对象,例如: ``` log4cplus::SharedAppenderPtr consoleAppender(new log4cplus::ConsoleAppender()); log4cplus::SharedAppenderPtr fileAppender(new log4cplus::FileAppender(LOG4CPLUS_TEXT("mylog.log"))); ``` 5. 设置appender对象的layout,例如: ``` log4cplus::LogFormattePtr formatter(new log4cplus::PatternLayout(LOG4CPLUS_TEXT("%d{%m/%d/%y %H:%M:%S.%q} %c %-5p - %m%n"))); consoleAppender->setLayout(formatter); fileAppender->setLayout(formatter); ``` 6. 将appender对象添加到logger对象中,例如: ``` logger.addAppender(consoleAppender); logger.addAppender(fileAppender); ``` 7. 记录日志,例如: ``` LOG4CPLUS_DEBUG(logger, "This is a debug message."); LOG4CPLUS_INFO(logger, "This is an info message."); LOG4CPLUS_WARN(logger, "This is a warn message."); LOG4CPLUS_ERROR(logger, "This is an error message."); LOG4CPLUS_FATAL(logger, "This is a fatal message."); ``` 以上是一个简单的log4cplus使用示例,具体使用方法可以参考log4cplus的官方文档和示例代码。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值