You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 regels
1.3 KiB

  1. #pragma once
  2. #include <set>
  3. #include <mutex>
  4. #include <cpputils/logging/rule.h>
  5. #include <cpputils/logging/logger.h>
  6. namespace utl {
  7. namespace logging {
  8. struct logger_impl : public logger
  9. {
  10. private:
  11. mutable std::mutex _mutex;
  12. std::string _name;
  13. std::set<rule*> _rules;
  14. public:
  15. const std::string& name () const override;
  16. bool is_enabled (log_level level) const override;
  17. void log (data_ptr_s data) const override;
  18. inline void registerRule(rule& rule)
  19. {
  20. std::lock_guard<std::mutex> lk(_mutex);
  21. _rules.insert(&rule);
  22. }
  23. inline void unregisterRule(rule& rule)
  24. {
  25. std::lock_guard<std::mutex> lk(_mutex);
  26. _rules.erase(&rule);
  27. }
  28. logger_impl(const std::string& n) :
  29. _name(n)
  30. { }
  31. };
  32. using logger_impl_ptr_u = std::unique_ptr<logger_impl>;
  33. void register_consumer (consumer& consumer);
  34. void unregister_consumer(consumer& consumer);
  35. rule_handle define_rule (matcher_ptr_u logger_matcher, matcher_ptr_u consumer_matcher, log_level min_level = log_level::debug, log_level max_level = log_level::error);
  36. void undefine_rule (rule_handle handle);
  37. void reset_logging();
  38. } }