【问题标题】:Log file not visible, unless the user exits the app日志文件不可见,除非用户退出应用程序
【发布时间】:2014-04-10 01:43:22
【问题描述】:

我遇到了一个问题,我在应用程序中记录了一些信息,例如请求、消息、响应,而这部分代码就是它发生的地方。我的目标是在应用程序运行时查看日志文件,这似乎现在不会发生,因此用户必须退出应用程序然后转到公用文件夹才能查看日志。如果需要,我可以提供更多信息。

 void LogClass::log(const char* pcszComponent, const char* pcszLevel, const CF1String& title, const CF1String& message)
    {
        m_guard.lock();

        QByteArray byteArray(QTime::currentTime().toString("HH:mm:ss.zzz").toAscii());
        XXString logMessage = XXFormatString("[%s] [%7s] [%4s] [%08X] [%s] [%s]\r\n", byteArray.constData(), pcszLevel, pcszComponent, QThread::currentThreadId(), title.c_str(), message.c_str());

        if (!m_pLogFile) {
            createLogFile();
        }

        if (m_pLogFile) {
            fputs(logMessage.c_str(), m_pLogFile);
            fflush(m_pLogFile);
        }

        m_guard.unlock();
    }

提前致谢。

【问题讨论】:

    标签: c++ blackberry-10 qnx momentics


    【解决方案1】:

    您在每条消息之后使用带有 fflush 的缓冲输出,因此您应该能够看到文件更新(因为数据已写入操作系统)。您看不到它的可能原因是操作系统没有将其内部文件缓冲区刷新到磁盘。你可以试试_commit function on Windowsfsync on Linux

    【讨论】:

    • 感谢 AlexT 的回答,鉴于我正在处理 BB10 平台这一事实,我不确定我是否完全理解给定的解决方案,你认为你可以给我一个 Windows 上的 _commit 函数的例子吗?给定 bb10 平台上 Linux 上的 fsync ?谢谢
    • @MRMido 我既没有使用 BB10 也没有使用 QNX,但我看到 QNX 有 fsync 所以你可以像 fsync(fileno(m_pLogFile)) 一样称呼它
    猜你喜欢
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多