25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 

143 satır
3.3 KiB

  1. #pragma once
  2. #include <sstream>
  3. #include <cpplogging/types.h>
  4. #define cpplogging_log(p_logger, p_level) \
  5. if (p_logger.is_enabled(::cpplogging::log_level::p_level)) \
  6. p_logger.log() \
  7. << ::cpplogging::level(::cpplogging::log_level::p_level) \
  8. << ::cpplogging::file(__FILE__) \
  9. << ::cpplogging::line(__LINE__)
  10. namespace cpplogging
  11. {
  12. struct logger;
  13. namespace __impl
  14. {
  15. /**
  16. * @brief Helper class to create a log entry.
  17. */
  18. struct log_helper
  19. : public std::ostringstream
  20. {
  21. public:
  22. cpplogging::logger& logger;
  23. log_entry_ptr_s entry;
  24. private:
  25. /**
  26. * @brief Move constructor.
  27. */
  28. log_helper(log_helper&&) = delete;
  29. /**
  30. * @brief Copy constructor.
  31. */
  32. log_helper(const log_helper&) = delete;
  33. public:
  34. /**
  35. * @brief Constructor.
  36. *
  37. * @param[in] p_logger Logger this log helper belongs to.
  38. */
  39. inline log_helper(cpplogging::logger& p_logger);
  40. /**
  41. * @brief Constructor.
  42. *
  43. * @param[in] p_logger Logger this log helper belongs to.
  44. * @param[in] p_entry Log entry to create.
  45. */
  46. inline log_helper(cpplogging::logger& p_logger, const log_entry_ptr_s& p_entry);
  47. /**
  48. * @brief Destructor. Will finally write the log entry.
  49. */
  50. inline ~log_helper();
  51. };
  52. }
  53. /**
  54. * @brief Class to create log messages.
  55. */
  56. struct logger
  57. {
  58. public:
  59. friend __impl::log_helper;
  60. private:
  61. std::string _name; //!< name of the logger
  62. private:
  63. /**
  64. * @brief Move constructor.
  65. */
  66. logger(logger&&) = delete;
  67. /**
  68. * @brief Copy constructor.
  69. */
  70. logger(const logger&) = delete;
  71. public:
  72. /**
  73. * @brief Constructor.
  74. */
  75. inline logger(const std::string name);
  76. /**
  77. * @brief Destructor.
  78. */
  79. virtual ~logger() = default;
  80. /**
  81. * @brief Get the name of the logger.
  82. */
  83. inline const std::string& name() const;
  84. /**
  85. * @brief Check if the passed log level is enabled.
  86. *
  87. * @param[in] level Level to check.
  88. *
  89. * @retval true The passed log level is enabled.
  90. * @retval false The passed log level is disabled.
  91. */
  92. virtual bool is_enabled(log_level level) const = 0;
  93. /**
  94. * @brief Write a log entry,
  95. *
  96. * @return Log helper to create log entry.
  97. */
  98. inline __impl::log_helper log();
  99. protected:
  100. /**
  101. * @brief Write a log entry.
  102. *
  103. * @param[in] entry Log entry to write.
  104. */
  105. virtual void write_entry(const log_entry_ptr_s& entry) const = 0;
  106. public:
  107. /**
  108. * @brief Get the instance on an logger with the passed name.
  109. *
  110. * @param[in] name Name of the loggger.
  111. *
  112. * @return Instance of the requested logger.
  113. */
  114. static logger& get(const std::string& name = "");
  115. };
  116. }
  117. #include "logger.inl"