부스트 1.62 이후로 사용자가 묻는 것을 수행하는 데코레이터가 max_size_decor
입니다. 다음과 같이 사용할 수 있습니다 :
boost::log::add_file_log
(
boost::log::keywords::file_name = "logs/Log_%Y-%m-%d_%H-%M-%S.log",
boost::log::keywords::rotation_size = 10 * 1024 * 1024,
boost::log::keywords::time_based_rotation = boost::log::sinks::file::rotation_at_time_point(0, 0, 0),
boost::log::keywords::auto_flush = true,
boost::log::keywords::format =
(
boost::log::expressions::stream
<< boost::log::expressions::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S:%f")
<< " [" << boost::log::expressions::attr<boost::log::attributes::current_thread_id::value_type>("ThreadID") << "]"
<< ": <" << boost::log::trivial::severity << "> "
<< boost::log::expressions::max_size_decor(1000)
[
boost::log::expressions::stream << boost::log::expressions::smessage
]
)
);
데코레이터는 채택 된 포맷터의 출력을 지정된 문자 수로 제한합니다.
자신 만의 포맷터를 만들 수도 있습니다. 여러 가지 방법으로 설명하는 답변이 this입니다. 예를 들어, 크기를 제한 할 것이라고 함수 포장 boost::phoenix::bind
을 사용할 수 있습니다 :이 예에서
boost::string_view limit_size(boost::log::value_ref<
std::string, boost::log::expressions::tag::smessage > const& message)
{
if (!message)
{
// No message attribute in the log record
return boost::string_view();
}
boost::string_view msg = message.get();
return msg.substr(0, 1000);
}
boost::log::add_file_log
(
boost::log::keywords::file_name = "logs/Log_%Y-%m-%d_%H-%M-%S.log",
boost::log::keywords::rotation_size = 10 * 1024 * 1024,
boost::log::keywords::time_based_rotation = boost::log::sinks::file::rotation_at_time_point(0, 0, 0),
boost::log::keywords::auto_flush = true,
boost::log::keywords::format =
(
boost::log::expressions::stream
<< boost::log::expressions::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S:%f")
<< " [" << boost::log::expressions::attr<boost::log::attributes::current_thread_id::value_type>("ThreadID") << "]"
<< ": <" << boost::log::trivial::severity << "> "
<< boost::phoenix::bind(&limit_size, boost::log::expressions::smessage.or_none())
)
);
을 phoenix::bind
메시지를 추출하는 래퍼 함수 객체가 로그 레코드에서 속성 값을 생성하고 당신에 전달합니다 함수는 value_ref
참조 래퍼에 래핑됩니다. 로그 레코드에 메시지가 없으면 참조 래퍼가 비어 있습니다 (즉, or_none
). 어떤 limit_size
이 반환 되든 포맷 프로세스의 일부로 스트림에 출력됩니다. 이 경우 boost::string_view
또는 boost::string_ref
을 사용하여 문자열 복사를 피할 수 있습니다.