簡體   English   中英

C++ QT 記錄儀 object

[英]C++ QT Logger object

我正在嘗試創建一個全局可訪問的 object(但我不確定創建一個全局 object 是否是一個好的解決方案),它將記錄到文件我的 output stream。我希望它的工作方式類似於 std::cout,但與區別在於它會記錄到文件中。

class Logger
{
    QFile* file;
    QTextStream* stream;

public:
    Logger(QString filePath);
    {
        file = new QFile(filePath);
        if(file.open(QIODevice::ReadWrite)
            stream = new QTextStream(file);
    }
    QTextStream* Log()
    {
        return stream;
    }
};


int main(int argc, char *argv[])
{
    QString filePath="Logs.txt";
    Logger l(filePath);
    MyProgram a(argc, argv);
    return a.exec();
}

如果它是全球性的,我所要做的就是l.Log()<<"text I want to log in" 我希望它像Log() << "text I want to log in"一樣工作,但任何解決方案都會有用::)

我還想提一下,我已經在 web 上找到了一個logger解決方案,但它包括創建一個臨時的 object - 在我的例子中,每次我想記錄一些文本時不斷打開和關閉文件不是一個解決方案。 (除非這個 object 會使用一些全局打開的文件)

你需要的是Singleton 設計模式 在整個程序中,你只需要一個 object 的記錄器 class。所以你需要使用 Singleton 設計模式並將其放入一個單獨的文件中,並將其包含在任何你需要的記錄器中。


要使用流式運算符(移位運算符<< ),您只需重載它:

friend Logger& operator<<(Logger& other, QString const& message)
{
        (*other.stream) << message;
        return other;
}

但是對於 Logger 來說,它並不是你寫的那么簡單。 記錄器的基本要求是:

  1. 高效地,在高速率日志記錄中足夠快。
  2. 線程安全,可以在多線程程序中使用。
  3. 格式化,方便使用。
  4. 日志分級,可以對日志進行分類。

看看: qDebug()qInfo()qWarning()qFatal() 我對日志庫的建議是:

  1. 提升日志
  2. 速度日志

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM