计算机二级考试C语言辅导:log4cxx输出到界面计算机二级考试
文章作者 100test 发表时间 2009:04:30 07:45:31
来源 100Test.Com百考试题网
2009年下半年全国计算机等级考试你准备好了没?考计算机等级考试的朋友,2009年下半年全国计算机等级考试时间是2009年9月19日至23日。更多优质资料尽在百考试题论坛 百考试题在线题库
其实做起来比较简单,不过因为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).
就是这么简单,是不是很方便?