如何在qt中将调试信息保存到特定文件中?

时间:2014-09-24 17:19:44

标签: c++ qt

我想知道如何将调试信息保存到名为" LogFile-YYYYMMDDHHMMSS"的文件中。我使用这样的公式:

QString dt = QDateTime::currentDateTime().toString("dd/MM/yyyy hh:mm:ss");
QString txt = QString("[%1] ").arg(dt);

switch (type)
{
  case QtDebugMsg:
     txt += QString("{Debug} \t\t %1").arg(msg);
     break;
  case QtWarningMsg:
     txt += QString("{Warning} \t %1").arg(msg);
     break;
  case QtCriticalMsg:
     txt += QString("{Critical} \t %1").arg(msg);
     break;
  case QtFatalMsg:
     txt += QString("{Fatal} \t\t %1").arg(msg);
     abort();
     break;
}

QFile outFile( QString("LogFile.log");
outFile.open(QIODevice::WriteOnly | QIODevice::Append);

QTextStream textStream(&outFile);
textStream << txt << endl;

2 个答案:

答案 0 :(得分:1)

试试这个:

QString dt = "LogFile";
dt += QDateTime::currentDateTime().toString("dd/MM/yyyy hh:mm:ss");
dt.remove("/");
dt.remove(":");
dt += ".log";
QFile outFile( dt );
utFile.open(QIODevice::WriteOnly | QIODevice::Append);

QTextStream textStream(&outFile);
textStream <<"test";
outFile.close();

您应删除此符号,因为操作系统禁止在文件路径中使用此符号,并且不会保存您的文件。

或者使用更简单的方式:

QString dt = "LogFile";
dt += QDateTime::currentDateTime().toString("ddMMyyyy hhmmss");
dt += ".log";

答案 1 :(得分:1)

我认为更好的答案是使用单个日期时间对象(在我的示例中为curdt),然后从一个对象中生成两种类型的字符串。一个用于日志信息里面日志,以及日志文件名本身。我们希望使用当前日期/时间的单个副本,以便我们在日志文件中写入的内容与日志文件名中显示的日期/时间相同(采用不同的格式)。如果您拨打QDateTime::currentDateTime()两次,可能会有两次略有不同的时间。

/* Store a copy of the current date and time */
QDateTime curdt = QDateTime::currentDateTime();

/* Convert it to a string for logging */
QString dtstr = curdt.toString("dd/MM/yyyy hh:mm:ss");
QString txt = QString("[%1] ").arg(dtstr);

/* Create a filename for the log */
QString logfilename = "LogFile-" + curdt.toString("yyyyMMddhhmmss") + ".log";

[snip]

QFile outFile(logfilename);