参考博客:https://blog.csdn.net/u014695839/article/details/84937769
在了解log4cplus之前,我们可以先了解以下log4j的设计方法:一个著名的日志系统是怎么设计出来的?而log4cplus是log4j的C++实现,提供的接口和使用逻辑与log4j基本保持一致。
下面的内容将简单介绍log4cplus并描述其使用方法:开头先了解一些基本的类(Logger、Appender和Layout),然后看看这些类提供了哪些接口,接下来才列出log4cplus的编程步骤,最后给出示例。
文中提及的内容细节可以查阅log4cplus的api文档:log4cplus Documentation
#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