Поворот файла журнала буста - превышен размер - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь войти в библиотеку Boost 1.61, вращающийся файл, как только размер превысил 5Ko.Но при каждом запуске программы начинается с первого файла журнала, превышающего максимальный размер !

То есть добавляет текст в flog000.txt, а затем в flog001.txt.

Но желаемое поведение было следующим: добавить к последнему файлу (flog002.txt) и продолжить с flog003.txt ...

Вот мой код:

#include <boost/log/common.hpp>
#include <boost/log/sinks/text_ostream_backend.hpp>
#include <boost/log/core.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <boost/log/sources/logger.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>

void init()
{
   boost::log::add_file_log
      (
      boost::log::keywords::file_name = "flog%3N.txt",
      boost::log::keywords::open_mode = std::ios_base::app,
      boost::log::keywords::rotation_size = 5 * 1024,
      boost::log::keywords::auto_flush = true
      );
}

int main()
{
   init();
   boost::log::sources::logger lg;
   boost::log::add_common_attributes();

   for (int i(0); i < 1000; ++i)
   {
      BOOST_LOG(lg) << "Hello : " << i << std::endl;
   }
    return 0;
}

1 Ответ

0 голосов
/ 06 июня 2018

«Сбор файлов отсутствует» - это, по крайней мере, часть проблемы.

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

Однако, если вы выполняете сканирование, вы можете по крайней мере предотвратить ошибочное добавление дополнительных сообщений журнала к более старым файлам журнала:

LiveНа Coliru

#include <boost/log/common.hpp>
#include <boost/log/core.hpp>
#include <boost/log/sinks/text_ostream_backend.hpp>
#include <boost/log/sources/logger.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/utility/setup/file.hpp>

void init() {
    auto s = boost::log::add_file_log(
            boost::log::keywords::file_name = "flog%3N.txt",
            boost::log::keywords::open_mode = std::ios_base::app,
            boost::log::keywords::rotation_size = 5 * 1024,
            boost::log::keywords::auto_flush = true
        );

    auto be = s->locked_backend();
    be->set_file_collector(boost::log::sinks::file::make_collector(
                boost::log::keywords::target = "./", // log file & target have same dir
                boost::log::keywords::max_size = 50 * 1024,
                boost::log::keywords::min_free_space = 100000
                ));

    be->scan_for_files(boost::log::sinks::file::scan_method::scan_matching, true);
}

int main() {
    init();
    boost::log::sources::logger lg;
    boost::log::add_common_attributes();

    for (int i(0); i < 1000; ++i) {
        BOOST_LOG(lg) << "Hello : " << i << std::endl;
    }
}

После одного прогона:

-rw-rw-r-- 1 sehe sehe 5116 jun  6 00:27 flog000.txt
-rw-rw-r-- 1 sehe sehe 5109 jun  6 00:27 flog001.txt
-rw-rw-r-- 1 sehe sehe 2665 jun  6 00:27 flog002.txt

После двух прогонов:

-rw-rw-r-- 1 sehe sehe 5116 jun  6 00:27 flog003.txt
-rw-rw-r-- 1 sehe sehe 5109 jun  6 00:27 flog004.txt
-rw-rw-r-- 1 sehe sehe 2665 jun  6 00:27 flog005.txt

После трех прогонов:

-rw-rw-r-- 1 sehe sehe 5116 jun  6 00:28 flog006.txt
-rw-rw-r-- 1 sehe sehe 5109 jun  6 00:28 flog007.txt
-rw-rw-r-- 1 sehe sehe 2665 jun  6 00:28 flog008.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...