logger.cpp 1.9 KB

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