基本的に、スレッドセーフな方法でデータを std::clog に書き込むための優れた方法であるロガーシステムがあります。
また、次のようなファイルにリダイレクトstd::clog
します。
int main() {
std::ofstream logfile(config::logname, std::ios::app);
std::streambuf *const old_buffer = std::clog.rdbuf(logfile.rdbuf());
// .. the guts of the application
std::clog.rdbuf(old_buffer);
}
これはうまく機能します...ただし、私のアプリケーションは非常に大量のログも生成します。ログ ファイルを適切にローテーションするにはどうすればよいか考えていました。cron タスクを介してファイルを切り替える安全な方法はありますか? いいえと思います。
私が考えることができる唯一のことは、アプリケーション自体が新しいファイルを開き、ロギングミューテックスを保持しながらclogのrdbufをそれにリダイレクトする場合です。しかし、それは安価な解決策のように感じます。ログをかなり頻繁にローテーションして有効にする時期かどうかを確認する必要があります。もっと良い方法があるはずです。