log4cplus
最近在使用log4cplus,gitHub上已经更新到2.0以后,但是网上基本上都是以前版本的教程。 所以遇到了一些问题,这里记录下来。 比如,以前的标准使用流程如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include <log4cplus/configurator.h> #include <log4cplus/fileappender.h> #include <log4cplus/initializer.h> #include <log4cplus/layout.h> #include <log4cplus/logger.h> #include <log4cplus/loggingmacros.h>
int main(int argc, char* argv[]) { SharedAppenderPtr _append(new FileAppender("Test.log")); _append->setName("filelogtest");
std::string pattern = "%d{%m/%d/%y %H:%M:%S} - %m [%l]%n"; std::auto_ptr<Layout> _layout(new PatternLayout(pattern));
_append->setLayout(_layout);
Logger _logger = Logger::getInstance("test_logger.subtest");
_logger.addAppender(_append);
LOG4CPLUS_DEBUG(_logger, "This is the FIRST log message..."); LOG4CPLUS_WARN(_logger, "This is the SECOND log message...");
return 0; }
|
ERROR1:auto_ptr is deprecated
①错误提示:
1
| auto_ptr<Layout> is deprecated,use unique_ptr instead
|
②原因:
意思是auto_ptr已经被弃用,现在使用unique_ptr。
③解决方法:
于是将auto_ptr改为unique_ptr:
1 2
| -- std::auto_ptr<Layout> _layout(new PatternLayout(pattern)); ++ std::unique_ptr<Layout> _layout(new PatternLayout(pattern));
|
ERROR2:unique_ptr(const unique_ptr) is deleted
①错误提示:
这个时候会报第二个错误:
1 2 3
| error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) \ [with _Tp = log4cplus::Layout; _Dp = std::default_delete<log4cplus::Layout>]’
|
②原因:
unique_ptr拥有它所指向的对象,在某一时刻,只能有一个unique_ptr指向特定的对象。当unique_ptr被销毁时,它所指向的对象也会被销毁。因此不允许多个unique_ptr指向同一个对象,所以不允许拷贝与赋值。
③解决方法:
只能移动unique_ptr。这意味着,内存资源所有权将转移到另一 unique_ptr,并且原始 unique_ptr 不再拥有此资源。
1 2
| -- _append->setLayout(_layout); ++ _append->setLayout(std::move(_layout));
|