[英]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 来说,它并不是你写的那么简单。 记录器的基本要求是:
看看: qDebug()
、 qInfo()
、 qWarning()
和qFatal()
。 我对日志库的建议是:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.