增强日志:文件旋转

时间:2019-11-27 05:55:19

标签: c++ boost boost-log

我对Boost日志文件轮换有疑问。日志文件轮换根据时间和文件大小发生。

rotation_size = 30 * 1024 * 1024

time_based_rotation =接收器:: file :: rotation_at_time_point(0,0,0)

当文件达到上述文件大小时,将创建另一个文件。假设文件在上述时间点之前旋转。我怀疑文件是否会在上述时间点旋转。

我有一个问题:

x1 / mm / yy_N1的文件已创建并达到文件大小,下一个文件旋转发生(x1 / mm / yy_N2)。在时间点(0,0,0)不会为x2 / mm / yy_N3创建新文件,因此x2的日志已写入x1 / mm / yy_N2。 我想同时在两个条件下旋转(大小和时间点)。帮帮我。

2 个答案:

答案 0 :(得分:2)

docs中所述,当满足一个或两个条件并且库尝试写入日志记录时,将发生文件轮换。因此,如果您的日志文件在午夜之前达到30 MiB,它将在该时间点旋转,然后在午夜(或在写入日志记录后的午夜之后)再次旋转,而不考虑文件大小。

答案 1 :(得分:1)

日志在两次出现时都会旋转。在此处检查code

有关其他证明,请考虑以下代码。

#include <boost/log/trivial.hpp>
#include <boost/log/common.hpp>
#include <boost/log/keywords/file_name.hpp>
#include <boost/log/keywords/format.hpp>
#include <boost/log/utility/setup.hpp>

#include <thread>

namespace logging = boost::log;
namespace sinks = boost::log::sinks;
namespace src = boost::log::sources;
namespace expr = boost::log::expressions;
namespace attrs = boost::log::attributes;
namespace keywords = boost::log::keywords;

void init()
{
    logging::add_file_log
    (
        keywords::file_name = "sample_%N.log",                                        
        keywords::rotation_size = 256 * 1024,
        keywords::time_based_rotation = sinks::file::rotation_at_time_interval(boost::posix_time::seconds(30)), 
        keywords::format = "[%TimeStamp%]: %Message%"                                 
    );

    logging::core::get()->set_filter
    (
        logging::trivial::severity >= logging::trivial::info
    );
}

int main(int, char*[])
{
    init();

    while(1) {
    BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
    BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
    BOOST_LOG_TRIVIAL(info) << "An informational severity message";
    BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
    BOOST_LOG_TRIVIAL(error) << "An error severity message";
    BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
    std::this_thread::sleep_for(std::chrono::milliseconds(10));
}

    return 0;
}

现在查看带有时间戳的日志文件列表。

-rw-r--r-- 1 manthan manthan 256K 2019-11-28 12:52:01.451001000 +0530 sample_12.log
-rw-r--r-- 1 manthan manthan  58K 2019-11-28 12:51:35.003001000 +0530 sample_11.log
-rw-r--r-- 1 manthan manthan 256K 2019-11-28 12:51:29.363001000 +0530 sample_10.log
-rw-r--r-- 1 manthan manthan  49K 2019-11-28 12:51:05.011001000 +0530 sample_9.log
-rw-r--r-- 1 manthan manthan 256K 2019-11-28 12:51:00.563001000 +0530 sample_8.log
-rw-r--r-- 1 manthan manthan 248K 2019-11-28 12:50:35.007001000 +0530 sample_7.log
-rw-r--r-- 1 manthan manthan 5.0K 2019-11-28 12:50:05.003001000 +0530 sample_6.log
-rw-r--r-- 1 manthan manthan 256K 2019-11-28 12:50:04.347001000 +0530 sample_5.log
-rw-r--r-- 1 manthan manthan  36K 2019-11-28 12:49:35.007001000 +0530 sample_4.log
-rw-r--r-- 1 manthan manthan 256K 2019-11-28 12:49:31.211001000 +0530 sample_3.log
-rw-r--r-- 1 manthan manthan 244K 2019-11-28 12:49:05.003001000 +0530 sample_2.log
-rw-r--r-- 1 manthan manthan  19K 2019-11-28 12:48:35.003001000 +0530 sample_1.log
-rw-r--r-- 1 manthan manthan 256K 2019-11-28 12:48:32.875001000 +0530 sample_0.log

从上述文件的时间戳来看,很明显,文件旋转发生在两个事件中。