file_logger::file_logger(std::string log_name, std::string log_directory, mlog_bytes max_file_size) :m_stream(get_next_logfile(log_directory, log_name, max_file_size, &m_offset), BOOST_IOS::app), m_log_name(std::move(log_name)), m_log_directory(std::move(log_directory)), m_max_file_size(std::move(max_file_size)), m_offset(0) { }
file_logger::file_logger(std::string log_name, std::string log_directory, mlog_bytes max_file_size) : m_flush_immediately(true), m_stream(get_next_logfile(log_directory, log_name, max_file_size, &m_offset), std::ios::app | std::ios::binary ), m_log_name(std::move(log_name)), m_log_directory(std::move(log_directory)), m_max_file_size(std::move(max_file_size)), m_offset(0) {}
void file_logger::write_to_log(const log_metadata& metadata, const std::string& log_text) { std::string str = metadata.to_string(log_text); m_stream.write(str.c_str(), str.size()); boost::iostreams::put(m_stream, '\n'); m_offset += str.size() + 1; flush(); if (max_file_size() != 0 && m_offset > max_file_size()) { flush(); m_stream.open(get_next_logfile(m_log_directory, m_log_name, max_file_size(), &m_offset)); } }
void file_logger::write_to_log(log_metadata&& metadata, std::string&& log_text) { std::string metadata_str = metadata.to_string(); std::size_t md_len = metadata_str.size(); std::size_t length = log_text.size() + md_len; char* buffer = new char[length + 1]; memcpy(buffer, metadata_str.c_str(), md_len); memcpy(&buffer[md_len], log_text.c_str(), log_text.size()); buffer[length] = '\n'; m_stream.write(buffer, length + 1); delete [] buffer; m_offset += length; flush(); if(max_file_size() != 0 && m_offset > max_file_size()) { flush(); m_stream.open(get_next_logfile(m_log_directory, m_log_name, max_file_size(), &m_offset)); } }