log4cxx输出到界面
2009-04-17 20:03:37 来源:WEB开发网其实做起来比较简单,不过因为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);
就是这么简单,是不是很方便?
更多精彩
赞助商链接