25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

63 lines
1.6 KiB

  1. #pragma once
  2. #include <set>
  3. #include <mutex>
  4. #include "rule.h"
  5. #include "../interface/logger.h"
  6. namespace cpplogging
  7. {
  8. struct logger_impl
  9. : public logger
  10. {
  11. private:
  12. mutable std::mutex _mutex; //!< mutex to protect the object
  13. std::set<rule*> _rules; //!< rules assigned to this logger
  14. log_level _min_level { log_level::unknown }; //!< min log level over all rules
  15. log_level _max_level { log_level::unknown }; //!< max log level over all rules
  16. public:
  17. using logger::logger;
  18. /**
  19. * @brief Add a rule to this logger.
  20. *
  21. * @param[in] rule Rule to add.
  22. */
  23. void add_rule(rule& rule);
  24. /**
  25. * @brief Remove a rule to this logger.
  26. *
  27. * @param[in] rule Rule to remove.
  28. */
  29. void remove_rule(rule& rule);
  30. /**
  31. * @brief Check if the passed log level is enabled.
  32. *
  33. * @param[in] level Level to check.
  34. *
  35. * @retval true The passed log level is enabled.
  36. * @retval false The passed log level is disabled.
  37. */
  38. bool is_enabled(log_level level) const override;
  39. protected:
  40. /**
  41. * @brief Write a log entry.
  42. *
  43. * @param[in] entry Log entry to write.
  44. */
  45. void write_entry(const log_entry_ptr_s& entry) const override;
  46. /**
  47. * @brief Update the log levels cached in the logger.
  48. */
  49. void update_log_level();
  50. };
  51. }