找回密码
 立即注册
收起左侧

关于Qt日志输出文件

4
回复
9293
查看
[复制链接]
累计签到:18 天
连续签到:1 天
来源: 2015-11-27 11:10:08 显示全部楼层 |阅读模式
1Qter豆
初学者请教一下路过的大神,在看了去一二三里的博客中的Qt之日志输出文件篇,不是很懂其为什么要在outputMessage函数中加锁?求指教,感谢感谢!



    需求(目的):生成log.txt日志文件,记录详细日志信息(包括等级、所在文件、所在行号、描述信息、产生时间等),以便于快速跟踪、定位。

void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    static QMutex mutex;
    mutex.lock();

    QString text;
    switch(type)
    {
    case QtDebugMsg:
        text = QString("Debug:");
        break;

    case QtWarningMsg:
        text = QString("Warning:");
        break;

    case QtCriticalMsg:
        text = QString("Critical:");
        break;

    case QtFatalMsg:
        text = QString("Fatal:");
    }

    QString context_info = QString("File%1) Line%2)").arg(QString(context.file)).arg(context.line);
    QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");
    QString current_date = QString("(%1)").arg(current_date_time);
    QString message = QString("%1 %2 %3 %4").arg(text).arg(context_info).arg(msg).arg(current_date);

    QFile file("log.txt");
    file.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream text_stream(&file);
    text_stream << message << "\r\n";
    file.flush();
    file.close();

    mutex.unlock();
}


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    //注册MessageHandler
    qInstallMessageHandler(outputMessage);

    //打印日志到文件中
    qDebug("This is a debug message");
    qWarning("This is a warning message");
    qCritical("This is a critical message");
    qFatal("This is a fatal message");

    return app.exec();
}


最佳答案

查看完整内容

很简单啊,加了锁的话,到多线程的时候,代码不用修改,直接用啊
回复

使用道具 举报

累计签到:30 天
连续签到:1 天
2015-11-27 11:10:09 显示全部楼层
很简单啊,加了锁的话,到多线程的时候,代码不用修改,直接用啊
回复

使用道具 举报

累计签到:882 天
连续签到:3 天
2015-11-27 19:49:17 显示全部楼层
加锁是一种安全的写法,为了保证写操作的完整性,不然在多线程环境中,是有可能混乱的,我是这样理解的。。。
回复

使用道具 举报

累计签到:18 天
连续签到:1 天
2015-11-28 16:27:10 显示全部楼层
一叶知秋 发表于 2015-11-27 19:49
加锁是一种安全的写法,为了保证写操作的完整性,不然在多线程环境中,是有可能混乱的,我是这样理解的。。 ...

可是他没有用多线程编程啊?
回复

使用道具 举报

累计签到:18 天
连续签到:1 天
2016-2-19 11:34:28 显示全部楼层
whsx2013001 发表于 2015-11-27 11:10
很简单啊,加了锁的话,到多线程的时候,代码不用修改,直接用啊

谢谢。。。。。。。。。。。。。。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了