0

QFileSystemWatcher を使用してログ ファイルの変更を制御しています。ログ ファイルの作成と更新には、boost ライブラリを使用しています。

1 つのメソッド ファイルにいくつかのメッセージをログに記録すると、信号を変更すると (最後のメッセージに対して) 1 つだけが出力されますが、ログ メッセージが追加されるたびにそのファイルが更新されます。

したがって、QFileSystemWatcher のコードは次のとおりです。

    std::string fn = "app.log";
    logging::init_log(fn);
    QFileSystemWatcher* watcher = new QFileSystemWatcher();
    auto success = QObject::connect(watcher, SIGNAL(fileChanged(QString)), this, SLOT(handleFileChanged(QString)));
    Q_ASSERT(success);
    watcher->addPath(QString::fromStdString(fn));

ログ メッセージの追加

void a(){
    /* some code */
    logging::write_log("test error", logging::kError);
    logging::write_log("test info", logging::kInfo);
}

QFileSystemWatcher は、Info レベル メッセージのシグナルのみを発行します。ファイルマネージャーでは、呼び出しごとにファイルが更新されていることがわかります(テストエラー、テスト情報)。ログファイルの初期化で使用します

    sink->locked_backend()->auto_flush(true);

そのため、ファイルはすぐに更新されます。

どうすればこれを修正できますか? または、ログ ファイルの更新を処理して GUI にメッセージを表示する別の方法があるかもしれません。

4

1 に答える 1