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 にメッセージを表示する別の方法があるかもしれません。