计算机二级考试C语言辅导:log4cxx输出到界面
来源:优易学  2011-12-10 16:41:07   【优易学:中国教育考试门户网】   资料下载   IT书店
  其实做起来比较简单,不过因为log4cxx的例子比较烦琐,所以费了一点时间
  这是头部,定义了一个appender
  #pragma once
  #include
  #include
  using namespace log4cxx;
  class GuiLogAppender : public AppenderSkeleton
  {
  public:
  DECLARE_LOG4CXX_OBJECT(GuiLogAppender)
  BEGIN_LOG4CXX_CAST_MAP()
  LOG4CXX_CAST_ENTRY(GuiLogAppender)
  LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton)
  END_LOG4CXX_CAST_MAP()
  GuiLogAppender()
  {
  textEdit=NULL;
  }
  GuiLogAppender(QPlainTextEdit *gui)
  {
  textEdit=gui;
  }
  bool requiresLayout() const
  { return true; }
  virtual void close() {}
  virtual void append(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& p);
  private:
  QPlainTextEdit *textEdit;
  };
  实现的部分很简单
  #include
  IMPLEMENT_LOG4CXX_OBJECT(GuiLogAppender)
  using namespace log4cxx::helpers;
  void GuiLogAppender::append(const spi::LoggingEventPtr& event, Pool& p)
  {
  LogString buf;
  //这个地方要小心,如果不想定义layout的话,就得自己搞。
  layout->format(buf, event, p);
  if(textEdit)
  {
  LOG4CXX_ENCODE_CHAR(str, buf);
  textEdit->appendPlainText(str.c_str());
  }
  }
  调用的时候就很方便。
  log4cxx::xml::DOMConfigurator::configure("log4cxx.xml");
  GuiLogAppender *appender=new GuiLogAppender(ui.plainTextEditMsg);
  appender->setLayout(new PatternLayout(LOG4CXX_STR("%-d{yyyy-MM-dd HH:mm:ss} %m")));
  Logger::getRootLogger()->addAppender(appender);
  就是这么简单,是不是很方便?

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训