logging.h raw

   1  // Copyright (c) 2019-present The Bitcoin Core developers
   2  // Distributed under the MIT software license, see the accompanying
   3  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
   4  
   5  #ifndef BITCOIN_TEST_UTIL_LOGGING_H
   6  #define BITCOIN_TEST_UTIL_LOGGING_H
   7  
   8  #include <util/macros.h>
   9  
  10  #include <functional>
  11  #include <list>
  12  #include <string>
  13  
  14  class DebugLogHelper
  15  {
  16  public:
  17      //! Custom match checking function.
  18      //!
  19      //! Invoked with pointers to lines containing matching strings, and with
  20      //! null if check_found() is called without any successful match.
  21      //!
  22      //! Can return true to enable default DebugLogHelper behavior of:
  23      //! (1) ending search after first successful match, and
  24      //! (2) raising an error in check_found if no match was found
  25      //! Can return false to do the opposite in either case.
  26      using MatchFn = std::function<bool(const std::string* line)>;
  27  
  28      explicit DebugLogHelper(std::string message, MatchFn match = [](const std::string*){ return true; });
  29  
  30      DebugLogHelper(const DebugLogHelper&) = delete;
  31      DebugLogHelper& operator=(const DebugLogHelper&) = delete;
  32  
  33      ~DebugLogHelper();
  34  
  35  private:
  36      const std::string m_message;
  37      bool m_found{false};
  38      std::list<std::function<void(const std::string&)>>::iterator m_print_connection;
  39      MatchFn m_match;
  40  };
  41  
  42  #define ASSERT_DEBUG_LOG(message) DebugLogHelper BITCOIN_UNIQUE_NAME(debugloghelper)(message)
  43  
  44  #endif // BITCOIN_TEST_UTIL_LOGGING_H
  45