WEB开发网
开发学院软件开发VC log4cxx输出到界面 阅读

log4cxx输出到界面

 2009-04-17 20:03:37 来源:WEB开发网   
核心提示:其实做起来比较简单,不过因为log4cxx的例子比较烦琐,log4cxx输出到界面,所以费了一点时间这是头部,定义了一个appender#pragma once#include #include using namespace log4cxx;class GuiLogAppender : public Appender

其实做起来比较简单,不过因为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);

就是这么简单,是不是很方便?

Tags:logcxx 输出 界面

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接