qxLib
file_logger_stream_ofstream.inl
Go to the documentation of this file.
1 /**
2 
3  @file file_logger_stream_ofstream.inl
4  @author Khrapov
5  @date 14.01.2026
6  @copyright © Nick Khrapov, 2026. All right reserved.
7 
8 **/
9 
10 namespace qx
11 {
12 
14  const config& streamConfig,
15  unit<size_t, units::data> bufferSize) noexcept
16  : base_file_logger_stream(streamConfig)
17 {
18  const std::filesystem::path path =
19  create_folder_and_get_log_file_path(streamConfig.eLogFilePolicy, streamConfig.svFileName);
20  m_File = std::basic_ofstream<char_type>(
21  path,
22  std::ios_base::binary
23  | (streamConfig.eLogFilePolicy == log_file_policy::clear_then_uppend ? std::ios_base::trunc
24  : std::ios_base::app));
25 
26  if (!m_File)
27  {
28  details::get_cerr<char_type>::get() << QXT("Can't open log file ") << path;
29  return;
30  }
31 
32  if (bufferSize.value > 0)
33  {
34  const unit<size_t, units::data> bytes = convert(bufferSize).to(units::data::bytes);
35  m_Buffer.resize(bytes / sizeof(char_type));
36  m_File.rdbuf()->pubsetbuf(m_Buffer.data(), m_Buffer.size());
37  }
38 
39  if constexpr (std::is_same_v<char_type, wchar_t>)
40  {
41  QX_DISABLE_MSVC_WARNINGS(4996);
42  m_File.imbue(std::locale(std::locale(), new std::codecvt_utf16<char_type, 0x10ffff, std::little_endian>));
43  QX_RESTORE_MSVC_WARNINGS(4996);
44  }
45 }
46 
47 inline file_logger_stream_ofstream::~file_logger_stream_ofstream()
48 {
49  if (m_File)
50  m_File << std::flush;
51 }
52 
53 inline void file_logger_stream_ofstream::do_log(const category& category, verbosity eVerbosity, string_view svMessage)
54 {
55  if (m_File)
56  m_File.write(svMessage.data(), svMessage.size());
57 }
58 
60 {
61  if (m_File)
62  m_File << std::flush;
63 }
64 
65 } // namespace qx
Base class for all file logger streams.
A category is a class that identifies a particular piece of code. This code can be located in differe...
Definition: category.h:59
A conversion class.
Definition: base.h:77
virtual void do_log(const category &category, verbosity eVerbosity, string_view svMessage) override
Proceed stream logging.
file_logger_stream_ofstream(const config &streamConfig=config(), unit< size_t, units::data > bufferSize={ 8192 *sizeof(char_type), units::data::bytes }) noexcept
file_logger_stream_ofstream object constructor
virtual void do_flush() override
Flush the stream.
Definition: base.h:52