logger.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. //
  2. // $Id$
  3. //
  4. #include<__vic/logger.h>
  5. #include<cstring>
  6. namespace __vic {
  7. //----------------------------------------------------------------------------
  8. logger::logger(output &out, severity_t level)
  9. : out(&out), rec_objs_count(0), log_level(level)
  10. {
  11. cur_msg.reserve(min_buffer_size);
  12. }
  13. //----------------------------------------------------------------------------
  14. logger::logger(settings_t s)
  15. : out(&s.output()), rec_objs_count(0), log_level(s.level())
  16. {
  17. cur_msg.reserve(min_buffer_size);
  18. }
  19. //----------------------------------------------------------------------------
  20. logger::~logger()
  21. {
  22. }
  23. //----------------------------------------------------------------------------
  24. void logger::message(severity_t s, const char *msg, size_t msg_len)
  25. {
  26. if(s >= level()) out->publish_record(s, msg, msg_len);
  27. }
  28. //----------------------------------------------------------------------------
  29. #if !__cpp_lib_string_view
  30. void logger::message(severity_t s, const char *msg)
  31. {
  32. if(s >= level()) out->publish_record(s, msg, std::strlen(msg));
  33. }
  34. #endif
  35. //----------------------------------------------------------------------------
  36. void logger::flush_()
  37. {
  38. // Micro-optimization: Avoiding message() fuction call
  39. //message(cur_severity, cur_msg.data(), cur_msg.length());
  40. if(cur_severity >= level())
  41. out->publish_record(cur_severity, cur_msg.data(), cur_msg.length());
  42. cur_msg.clear();
  43. //shrink_buffer(hi_water_mark); // prevent uncontrolled buffer growth
  44. }
  45. //----------------------------------------------------------------------------
  46. #if __cpp_lib_format >= 202106L
  47. void logger::vformat_(
  48. severity_t s, std::string_view fmt, std::format_args args)
  49. {
  50. std::vformat_to(
  51. std::back_insert_iterator<std::string>{cur_msg}, fmt, args);
  52. out->publish_record(s, cur_msg.data(), cur_msg.length());
  53. cur_msg.clear();
  54. }
  55. #endif
  56. //----------------------------------------------------------------------------
  57. } // namespace