[英]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.