让 Log4Cxx 不需要使用配置文件
文章目录
通常情况下使用 log4cxx 都是通过一个 log4cxx 配置文件来配置相关参数的,通常描述 log4cxx 的文档1, 2,都会对此作详细的介绍。
但是,如果我能直接在 C/C++ 代码里设置 log4cxx 的属性,这样就可以不使用属性配置文件了。在某些情况下,这样还是更方便一些。从 log4xxx Wiki 获取的示例代码就是起这个作用的,代码如下:
#include <log4cxx/logger.h> #include <log4cxx/helpers/pool.h> #include <log4cxx/basicconfigurator.h> #include <log4cxx/fileappender.h> #include <log4cxx/simplelayout.h> int main() { log4cxx::FileAppender * fileAppender = new log4cxx::FileAppender( log4cxx::LayoutPtr(new log4cxx::SimpleLayout()), "logfile", false); log4cxx::helpers::Pool p; fileAppender->activateOptions(p); log4cxx::BasicConfigurator::configure(log4cxx::AppenderPtr(fileAppender)); log4cxx::Logger::getRootLogger()->setLevel(log4cxx::Level::getDebug()); log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger("logger"); LOG4CXX_INFO(logger,"Created FileAppender appender"); return 0; }
上面的代码仅仅是把日志输出到日志文件,如果我们想同时把日志重定向到终端和文件,我们应该添加一个 log4cxx::ConsoleAppender 类来支持 log4cxx::BasicConfigurator 的初始化。下面是示例代码:
#include <log4cxx/logger.h> #include <log4cxx/helpers/pool.h> #include <log4cxx/basicconfigurator.h> #include <log4cxx/fileappender.h> #include <log4cxx/simplelayout.h> #include "log4cxx/consoleappender.h" LoggerPtr logger; int main() { log4cxx::FileAppender * fileAppender = new log4cxx::FileAppender(log4cxx::LayoutPtr(new log4cxx::SimpleLayout()), L"logfile", false); log4cxx::ConsoleAppender * consoleAppender = new log4cxx::ConsoleAppender(log4cxx::LayoutPtr(new log4cxx::SimpleLayout())); log4cxx::helpers::Pool p; fileAppender->activateOptions(p); log4cxx::BasicConfigurator::configure(log4cxx::AppenderPtr(fileAppender)); log4cxx::BasicConfigurator::configure(log4cxx::AppenderPtr(consoleAppender)); log4cxx::Logger::getRootLogger()->setLevel(log4cxx::Level::getDebug()); log4cxx::LoggerPtr logger = log4cxx::Logger::getLogger("logger"); LOG4CXX_INFO(logger,"Created FileAppender appender"); return 0; }
通过上面的代码,在没有 log4cxx 配置文件的情况下,日志也同样可以同时输出到终端和日志文件了。
Footnotes:
1 log4cxx: configuring appender with arguments
<p class="footnote">
<sup><a class="footnum" name="fn.2" href="#fnr.2">2</a></sup> <a href="http://stackoverflow.com/questions/6172932/reading-property-info-in-log4cxx">Reading Property Info in Log4cxx</a>
</p></p>
文章作者 cookwhy
上次更新 2013-01-23