2014-11-28 3 views
3

Я недавно принял Easylogging++ в своем приложении на C++ и столкнулся с тем, что я надеюсь, это просто что-то, что осталось от их документации.easylogging ++: Очистка файла журнала при запуске приложения

Я хочу, чтобы мой файл журнала очищался каждый раз, когда запускается мое приложение, вместо добавления событий журнала из предыдущих экземпляров приложения. Я понимаю, что я мог просто удалить файл журнала при запуске до любых событий регистрации, но это кажется взломом.

Любая помощь будет оценена по достоинству. Благодарю.

ответ

3

Мне не удалось найти решение этой проблемы, не прибегая к редактированию easylogging ++. H. Очевидно, я надеялся, что это не будет необходимо, но я вполне уверен, что с версии 9.77 не существует встроенного средства для сброса файла журнала при запуске приложения. Во что бы то ни стало, пожалуйста, исправьте меня, если я ошибаюсь.

Проверяя код, я обнаружил, что файлы журналов всегда создаются в режиме добавления. Кажется, нет никакой дополнительной логики, которая явно удаляет файлы журналов.

Для всех, кто интересуется моей работой с хаком, я изменил аргумент открытого режима, переданный в конструктор fstream в utils :: File :: newFileStream(), чтобы включить fstream :: trunc вместо fstream :: app. Изменение происходит вблизи строки 1084 в easylogging ++. H, v9.77.

Вот часть кода я имею в виду:

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, чтобы его можно было легко распознать.

2

Начиная с версии v9.84 есть возможность сконфигурировать это, указав configuration macro.

Вам нужно добавить #define ELPP_FRESH_LOG_FILE перед тем #include "easylogging++"

Скорее всего, вы не хотите делать это с каждым включают. Автор рекомендует использовать флаги компилятора. В качестве альтернативы вы можете создать заголовок обертки.

+0

Только что загрузил easylogging ++ _ v9.84.zip. Открыл easylogging ++. H и заметил эту строку в верхней части файла: // Easylogging ++ v9.83 –

+0

Я подтвердил, что код в easylogging ++ .h фактически обрабатывает ELPP_FRESH_LOG_FILE компилятор def (и он работает). Ницца! Таким образом, это, по-видимому, просто случай не обновлять комментарий, чтобы отобразить правильный номер версии. –

Смежные вопросы