下载链接:
https://nchc.dl.sourceforge.net/project/log4cplus/log4cplus-stable/2.0.5/log4cplus-2.0.5.7z
下载后,解压。
找到msvc14文件夹,在里面找到VS的解决方案,打开它。
打开后,根据所需要求,设置项目的属性,如果是需要在x86环境下使用,就设置为x86,如果是在debug下用就设置为debug,解决方案默认的好像是多字节字符集,如果要在Qt中使用,最好改为Unicode字符集。
右键生成这些项目
找到解决方案所在的文件夹里面 Win32\bin.Debug(我用的是win32如果是x64的话,就不一样),在这个文件夹里面找到dll和lib。
加载到自己的项目里面。
如果是qt环境的话用log4cplusSD.lib,如果不是的话就随便吧。
最后一定要注意:不要声明全局变量或者静态变量的log对象,最好别把初始化弄到构造函数里面。
代码:
#include <log4cplus/logger.h>
#include <log4cplus/configurator.h>
#include <log4cplus/layout.h>
#include <log4cplus/loggingmacros.h>
#include <log4cplus/helpers/stringhelper.h>
#include <QString>
#include <Windows.h>
#include <iostream>
#define MY_LOG_FILE_PATH L".\\logconfig.property" //配置文件路径
using namespace std;
using namespace log4cplus;、
class Log
{
public :
Log();
~Log();
void Init();
void output_Log(QString);
private:
Logger logger;
};
Log::Log()
{
}
void Log::Init()
{
log4cplus::initialize(); //初始化日志
log4cplus::PropertyConfigurator::doConfigure(MY_LOG_FILE_PATH); //读取配置文件
logger = log4cplus::Logger::getRoot(); //根记录器始终被实例化并可用。它的名字是"root"
}
Log::~Log()
{
}
void Log::output_Log(QString msg)
{
LOG4CPLUS_DEBUG(logger,msg.toStdString().c_str());
}
配置文件:
#RootLogger配置格式:log4cplus.rootLogger=[LogLevel],appenderName1,appenderName2,...,如此处LogLevel为DEBUG,appenderName1为 rootLogger
log4cplus.rootLogger=DEBUG,rootLogger
#设置日志追加到文件尾
log4cplus.appender.rootLogger=log4cplus::RollingFileAppender
#log4cplus.appender.rootLogger=log4cplus::ConsoleAppender #设置直接在控制台输出
#设置日志文件大小
log4cplus.appender.rootLogger.MaxFileSize=100MB
#设置生成日志最大个数
log4cplus.appender.rootLogger.MaxBackupIndex=2
#设置输出日志路径
log4cplus.appender.rootLogger.File=rootLogger.log
log4cplus.appender.rootLogger.layout=log4cplus::PatternLayout
#设置日志打印格式
log4cplus.appender.rootLogger.layout.ConversionPattern=%D:%d{%Q}|%p|%t|%l|%m|%n
#设置日志级别范围
log4cplus.appender.rootLogger.filters.1=log4cplus::spi::LogLevelRangeFilter
log4cplus.appender.rootLogger.filters.1.LogLevelMin=TRACE
log4cplus.appender.rootLogger.filters.1.LogLevelMax=FATAL
log4cplus.appender.rootLogger.filters.1.AcceptOnMatch=true
log4cplus.appender.rootLogger.filters.2=log4cplus::spi::DenyAllFilter
#=====================================================================================
log4cplus.logger.test=DEBUG,test
log4cplus.appender.test=log4cplus::RollingFileAppender
log4cplus.appender.test.File=test.log
log4cplus.appender.test.layout=log4cplus::PatternLayout
log4cplus.appender.test.layout.ConversionPattern=%D:%d{%Q}|%p|%t|%l|%m|%n
log4cplus.appender.test.filters.1=log4cplus::spi::LogLevelRangeFilter
log4cplus.appender.test.filters.1.LogLevelMin=TRACE
log4cplus.appender.test.filters.1.LogLevelMax=FATAL
log4cplus.appender.test.filters.1.AcceptOnMatch=true
log4cplus.appender.test.filters.2=log4cplus::spi::DenyAllFilter
log4cplus.appender.test.MaxFileSize=100MB
log4cplus.appender.test.MaxBackupIndex=2
#如何防止自定义的logger和root重复写入日志
log4cplus.additivity.test=false