繁体   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