1 问题
在升级项目过程中,编译log4cplus时报错:
错误:no matching function for call to ‘log4cplus::Appender::setLayout(std::auto_ptr<log4cplus::Layout>&)’
1> pRollingFileAppender->setLayout(pPatternLayout);
2 解决方法
pRollingFileAppender->setLayout(std::move(pPatternLayoutCons));
3 详细代码
// 设置日志路径
g_LogPathPref = "/Logs/" + strLogName;
std::string strLogPath = g_LogPathPref + ".log";
// 定义1个控制台的Appender,1个文件Appender
SharedAppenderPtr pConsoleAppender(new ConsoleAppender());
SharedAppenderPtr pRollingFileAppender(new RollingFileAppender(strLogPath, nLogSize, 10, true, true));
// 定义一个PatternLayout,并绑定到 pRollingFileAppender
std::unique_ptr<Layout> pPatternLayout(new PatternLayout("$$[%D{%Y-%m-%d %H:%M:%S}]~[\%-5p]~%m##%n"));
pRollingFileAppender->setLayout(std::move(pPatternLayout));
// 定义一个PatternLayout,并绑定到 pConsoleAppender
std::unique_ptr<Layout> pPatternLayoutCons(new PatternLayout("[%D{%H:%M:%S}] [\%-5p] %m%n"));
pConsoleAppender->setLayout(std::move(pPatternLayoutCons));
// 定义Logger
g_Logger = Logger::getInstance("DpLogger");
g_Logger.setLogLevel(getLevel(strLogLevel));
// 将需要关联Logger的Appender添加到Logger上
g_Logger.addAppender(pConsoleAppender); //控制台
g_Logger.addAppender(pRollingFileAppender); //日志文件
4 备注
在定义智能指针时,我们使用的是unique_ptr ,之前的版本使用的是std::auto_ptr。
具体的比较参考文章:C++ | auto_ptr与unique_ptr 。目前c++17已经弃用了auto_ptr,方便之后的在升级,更新使用unique_ptr。