私は最近、C++ アプリケーションにEasylogging++を採用しましたが、ドキュメントから取り残されていることを願っています。
以前のアプリケーション インスタンスからのログ イベントを追加するのではなく、アプリケーションを起動するたびにログ ファイルをクリアしたいと考えています。ロギング イベントの前に、起動時にログ ファイルを削除することもできますが、これはハックのようです。
どんな助けでも大歓迎です。ありがとう。
私は最近、C++ アプリケーションにEasylogging++を採用しましたが、ドキュメントから取り残されていることを願っています。
以前のアプリケーション インスタンスからのログ イベントを追加するのではなく、アプリケーションを起動するたびにログ ファイルをクリアしたいと考えています。ロギング イベントの前に、起動時にログ ファイルを削除することもできますが、これはハックのようです。
どんな助けでも大歓迎です。ありがとう。
バージョン v9.84 では、 構成マクロを定義することでこれを構成できる可能性があります。
#define ELPP_FRESH_LOG_FILE
前に追加する必要があります#include "easylogging++"
ほとんどの場合、すべてのインクルードでこれを行いたくないでしょう。著者は、コンパイラ フラグの使用を推奨しています。または、ラッパー ヘッダーを作成することもできます。
easylogging++.h を編集しない限り、この問題の解決策を見つけることができませんでした。明らかに、それが必要ないことを望んでいましたが、v9.77 の時点で、アプリケーションの起動時にログ ファイルをリセットするための組み込み機能が存在しないことは確かです。是非、間違っていたら訂正してください。
コードを調べたところ、ログ ファイルは常に追加モードで作成されることがわかりました。ログ ファイルを明示的に削除するロジックは他にないようです。
私のハックの仕事に興味がある人のために、utils::File::newFileStream() の fstream コンストラクターに渡されるオープン モード引数を変更して、fstream::app の代わりに fstream::trunc を含めました。変更は、v9.77 の easylogging++.h の 1084 行目付近で発生します。
私が参照しているコードのセクションは次のとおりです。
namespace utils {
class File : base::StaticClass {
public:
/// @brief Creates new out file stream for specified filename.
/// @return Pointer to newly created fstream or nullptr
static base::type::fstream_t* newFileStream(const std::string& filename) {
// CLW: Dec 29, 2014:
// I don't want a log file containing log events from past application instances,
// but there seems to be no built-in way to reset the log file when the app is started
// So, I'm changing the open mode in the following fstream constructor call to include
// fstream::trunc instead of fstream::app.
base::type::fstream_t *fs = new base::type::fstream_t(filename.c_str(),
base::type::fstream_t::out | base::type::fstream_t::trunc);
// base::type::fstream_t *fs = new base::type::fstream_t(filename.c_str(),
// base::type::fstream_t::out | base::type::fstream_t::app);
厄介なコードのフォーマットで申し訳ありません。簡単に認識できるように、現在 easylogging++.h でフォーマットされている方法でコードをコピーしました。