将终端上的所有消息和警告打印到文件?

时间:2013-11-19 09:48:11

标签: c++ qt logging

我想在我的应用程序中生成Log,即在终端窗口或cmd窗口上生成的任何内容都将生成为文本文件中的日志。

e.g。我有一个客户端服务器程序,所以我在终端上得到的任何消息或警告都会打印在日志文件中以及时间戳。

任何想法,QxtLog或log4Qt是否都符合我的要求?

2 个答案:

答案 0 :(得分:2)

安装Qt消息处理程序。

FILE *fd;

void myMessageOutput(QtMsgType type, const char *msg)
{
    QString timeStamp = QTime::currentTime().toString("hh:mm:ss:zzz");
    switch (type) {
    case QtDebugMsg:
        fprintf(fd, "[%s]", timeStamp.toStdString().c_str());
        fprintf(fd, "[Debug] %s\n", msg);
        break;
    case QtWarningMsg:
        fprintf(fd, "[%s]", timeStamp.toStdString().c_str());
        fprintf(fd, "[Warning] %s\n", msg);
        break;
    case QtCriticalMsg:
        fprintf(fd, "[%s]", timeStamp.toStdString().c_str());
        fprintf(fd, "[Critical] %s\n", msg);
        break;
    case QtFatalMsg:
        fprintf(fd, "[%s]", timeStamp.toStdString().c_str());
        fprintf(fd, "[Fatal] %s\n", msg);
        abort();
    }
}

int main(int argc, char **argv)
{
    fd = fopen("log.txt", "a");
    qInstallMsgHandler(myMessageOutput);
    QApplication app(argc, argv);
    ...
    return app.exec();
}

答案 1 :(得分:1)

一种快速而简单的方法是将软件的输出传输到文件中。

对于更复杂的方法,我建议考虑log4cplus(http://sourceforge.net/p/log4cplus/wiki/Home/) - 我不知道log4Qt,但我想它可能有类似的接口。

Log4Cplus允许为日志创建不同的频道/优先级,因此您还可以根据重要性过滤输出,这可能会很有趣,具体取决于项目的大小。