提升日志旋转文件 - 超出大小

时间:2018-06-05 13:00:36

标签: c++ logging visual-c++ boost

我尝试使用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 :(得分:1)

“没有文件收集” - 这至少是问题的一部分。

似乎无法将扫描附加到现有内容。

但是,如果您进行扫描,则至少可以防止额外的日志消息错误地附加到旧的日志文件中:

<强> Live On 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