qxLib
error_context.inl
Go to the documentation of this file.
1 /**
2 
3  @file error_context.inl
4  @author Khrapov
5  @date 10.02.2026
6  @copyright © Nick Khrapov, 2026. All right reserved.
7 
8 **/
9 
10 namespace qx
11 {
12 
13 inline error_context::error_context(verbosity eMinCaptureVerbosity, string_view svHeader, string_view svFooter) noexcept
14  : m_svHeader(svHeader)
15  , m_svFooter(svFooter)
16  , m_eMinCatchVerbosity(eMinCaptureVerbosity)
17 {
18  std::shared_lock _(get_logger().get_streams_mutex());
19 
20  if (auto* pStream = get_logger().get_stream<error_context_stream>())
21  {
22  m_OnMessagesToken = (*pStream->get_on_messages().lock())[std::this_thread::get_id()].add_token(
23  *this,
24  &error_context::on_message);
25  m_OnErrorToken = pStream->get_on_error().lock()->add_token(*this, &error_context::on_error);
26  }
27 }
28 
29 inline error_context::~error_context() noexcept
30 {
31  std::shared_lock _(get_logger().get_streams_mutex());
32 
33  if (auto* pStream = get_logger().get_stream<error_context_stream>())
34  {
35  (*pStream->get_on_messages().lock())[std::this_thread::get_id()].remove(m_OnMessagesToken);
36  pStream->get_on_error().lock()->remove(m_OnErrorToken);
37  }
38 }
39 
40 inline void error_context::on_message(verbosity eVerbosity, string_view svMessage) noexcept
41 {
42  if (eVerbosity >= m_eMinCatchVerbosity)
43  m_sMessages += svMessage;
44 }
45 
46 inline void error_context::on_error(std::thread::id errorThreadId) noexcept
47 {
48  if (m_ThreadId == errorThreadId && !m_sMessages.empty())
49  QX_LOG(qx::verbosity::log, "\n{}\n{}{}", m_svHeader, m_sMessages, m_svFooter);
50 }
51 
52 } // namespace qx
error_context(verbosity eMinCaptureVerbosity, string_view svHeader=QXT("Error context start"), string_view svFooter=QXT("Error context end")) noexcept
error_context object constructor
logger & get_logger() noexcept
Get the logger instance used in QX_LOG macros.
Definition: logger.h:267
#define QX_LOG(eVerbosity,...)
Log message.
Definition: logger.h:40