повысить производительность журнала text_file_backend

Я использую журнал повышения и выбираю text_file_backend, но у меня плохая производительность. Независимо от синхронизации или асинхронности, журнал повышения производительности имеет низкую производительность. Примерно за 6 секунд он записал 30M данных в файл журнала. Следуйте моему фрагменту кода, кто-нибудь может мне помочь?

    typedef boost::log::sinks::asynchronous_sink<
      boost::log::sinks::text_file_backend> TextSink; 
    boost::log::sources::severity_logger_mt<LogSev> logger_;
    boost::shared_ptr<TextSink> report_sink_;

    // initialize report_sink
    boost::shared_ptr<sinks::text_file_backend> report_backend =
        boost::make_shared<sinks::text_file_backend>(
            keywords::file_name = target + "/" + file_name
                + ".report.log.%Y_%m_%d.%N",
            keywords::rotation_size = file_size, keywords::time_based_rotation =
                sinks::file::rotation_at_time_point(0, 0, 0),
            keywords::auto_flush = false);

    boost::shared_ptr<sinks::file::collector> report_collector = CreateCollector(
        target, max_use_size / 2, min_free_size);
    report_backend->set_file_collector(report_collector);
    report_backend->scan_for_files();

    // add sink: report_sink
    report_sink_ = boost::make_shared<TextSink>(report_backend);
    report_sink_->set_formatter(
        expr::format("[%1%]" + sep + "[%2%]" + sep + "[%3%]" + sep + "%4%")
            % expr::format_date_time<boost::posix_time::ptime>(
                "TimeStamp", "%Y-%m-%d %H:%M:%S.%f")
            % expr::attr<LogSev>("Severity")
            % expr::attr<attrs::current_thread_id::value_type>("ThreadID")
            % expr::message);
    report_sink_->set_filter(expr::attr<LogSev>("Severity") >= report);
    logging::core::get()->add_sink(report_sink_);

    logging::add_common_attributes();

    BOOST_LOG_SEV(logger_, info) << "blabal...";

person Nature.Li    schedule 14.10.2016    source источник


Ответы (1)


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

см. пример:

#include "date.h"

#define MY_TIME std::chrono::hours(4) + std::chrono::minutes(30)

string timestamp = date::format("%F %T", std::chrono::system_clock::now() + 
                                MY_TIME);
person Jafar Gh    schedule 05.04.2020