novesky的个人主页

http://www.qtcn.org/bbs/u/73156  [收藏] [复制]

novesky

  • 16

    关注

  • 37

    粉丝

  • 188

    访客

  • 等级:侠客
  • 总积分:130
  • 男,2011-11-16

最后登录:2016-01-11

更多资料

日志

Log4Qt使用---自定义输出位置

2011-08-14 17:09
Log4Qt的一个强大之处在于可以把log同时记录到不同地方,可以是文件、终端和数据库等等,这里介绍如何把log4qt的log记录输出到一个窗口,输出到其他地方也类似。
主要是继承Log4Qt::AppenderSkeleton重新实现里面的几个虚函数。
  1. #ifndef LOGVIEW_H
    #define LOGVIEW_H
    class QTextBrowser;
    /*! \brief root::LogView
            \author Wang Bin <[email]wbsecg1@gmail.com[/email]>
            \version 0.01
            \date 2011.08.03

            Log信息显示窗口。
    */
    class LogView : public QWidget
    {
            Q_OBJECT
            LOG4QT_DECLARE_QCLASS_LOGGER
    public:
            LogView(QWidget *parent = 0);
            QTextBrowser *view() const {return mView;}
    public slots:
            void appendLog(const QString &pMessage);
    private:
            QMutex mMutex;
            QTextBrowser *mView;
    };
    class LogViewAppender : public Log4Qt::AppenderSkeleton
    {
        Q_OBJECT
    public:
            LogViewAppender(QObject *pParent = 0);
            ~LogViewAppender();
    signals:
            void OnMessageAppend(const QString& msg);
    protected:
            virtual bool requiresLayout() const;
            virtual void append(const Log4Qt::LoggingEvent &rEvent);
    #ifndef QT_NO_DEBUG_STREAM
            virtual QDebug debug(QDebug &rDebug) const;
    #endif //QT_NO_DEBUG_STREAM
    private:
            LogView *mLogView;
    };
    #endif // LOGVIEW_H




  1. #include "logview.h"
    #include <QtCore/QDebug>
    #include <QtGui/QTextBrowser>
    #include <QtGui/QLayout>
    LogView::LogView(QWidget* parent)
            :QWidget(parent)
    {
            QVBoxLayout *vlayout = new QVBoxLayout;
            setLayout(vlayout);
            qRegisterMetaType<QTextCursor>("QTextCursor");
            mView = new QTextBrowser(this);
            vlayout->addWidget(mView);
            showMaximized();
    }
    void LogView::appendLog(const QString &pMessage)
    {
            QMutexLocker lock(&mMutex);
            //QString msg = pMessage.trimmed();
            //mView->append(msg);
            mView->insertPlainText(pMessage);
            mView->moveCursor(QTextCursor::End);
            mView->ensureCursorVisible();
    }
    LogViewAppender::LogViewAppender(QObject *parent) :
            Log4Qt::AppenderSkeleton(parent),mLogView(NULL)
    {
    }
    LogViewAppender::~LogViewAppender()
    {
            if (mLogView) {
                    mLogView->close();
                    mLogView = NULL;
            }
    }
    bool LogViewAppender::requiresLayout() const
    {
            return true;
    }
    void LogViewAppender::append(const Log4Qt::LoggingEvent &rEvent)
    {
            Q_ASSERT_X(layout(), "LogViewAppender::append()", "Layout must not be null");
            QString message(layout()->format(rEvent));
            emit OnMessageAppend(message);
            /*if (!mLogView) {
                    mLogView = new LogView;
            }
            mLogView->show(); //
            mLogView->appendLog(message);*/
    }
    #ifndef QT_NO_DEBUG_STREAM
    QDebug LogViewAppender::debug(QDebug &rDebug) const
    {
            return rDebug.space();
    }
    #endif //QT_NO_DEBUG_STREAM




  1. bool InitializeLog4QtView(LogView *widget)
    {
            Log4Qt::Logger *logger = Log4Qt::Logger::rootLogger();
            LogViewAppender *viewappender = new LogViewAppender;
            viewappender->setName("ViewAppender");
            Log4Qt::TTCCLayout *viewlayout = new Log4Qt::TTCCLayout(Log4Qt::TTCCLayout::ISO8601);
            viewlayout->setThreadPrinting(true);
            viewappender->setLayout(viewlayout);
            viewappender->activateOptions();
            logger->addAppender(viewappender);
            QObject::connect(viewappender, SIGNAL(OnMessageAppend(QString)), widget, SLOT(appendLog(QString)));
            return true;
    }
    bool FinalizeLog4Qt()
    {
            Log4Qt::Logger *logger = Log4Qt::Logger::rootLogger();
            logger->removeAllAppenders();
            return true;
    }




分类:默认分类|回复:0|浏览:4115|全站可见|转载
 

下一篇: 分享我的工程文件

上一篇:

Powered by phpwind v8.7 Certificate Copyright Time now is:05-02 03:45
©2005-2016 QTCN开发网 版权所有 Gzip disabled