Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

66 wiersze
2.2 KiB

  1. #include <cstring>
  2. #include <cpputils/misc/stream.h>
  3. #include <cpputils/logging/consumer/consumer_stream.h>
  4. using namespace ::utl;
  5. using namespace ::utl::logging;
  6. void consumer_stream::log(data_ptr_s data)
  7. {
  8. std::lock_guard<std::mutex> lk(_mutex);
  9. using namespace std;
  10. if (!data)
  11. return;
  12. auto& d = *data;
  13. auto t = std::chrono::duration_cast<std::chrono::duration<double, std::ratio<1>>>(d.time.time_since_epoch()).count();
  14. auto f = d.file;
  15. if (f)
  16. {
  17. auto tmp = strrchr(f, '/');
  18. if (tmp)
  19. f = tmp + 1;
  20. }
  21. else
  22. f = "unknown";
  23. stream_format_saver format_saver(*_stream);
  24. if (t >= 0) *_stream << "[" << fixed << setfill(' ') << setw(17) << setprecision(6) << t << "] ";
  25. switch(d.level)
  26. {
  27. case log_level::debug: *_stream << "DEBUG "; break;
  28. case log_level::info: *_stream << "INFO "; break;
  29. case log_level::warn: *_stream << "WARN "; break;
  30. case log_level::error: *_stream << "ERROR "; break;
  31. }
  32. if (d.sender) *_stream << "0x" << hex << setw(2 * sizeof(void*)) << setfill('0') << d.sender;
  33. else *_stream << " ";
  34. if (d.thread != std::thread::id()) *_stream << "@" << hex << setw(2 * sizeof(void*)) << setfill('0') << d.thread;
  35. else *_stream << " ";
  36. if (!d.name.empty()) *_stream << " '" << d.name << "'";
  37. if (d.line) *_stream << " - " << setw(25) << setfill(' ') << f << ":" << setw(5) << setfill(' ') << dec << d.line;
  38. if (!d.message.empty())
  39. {
  40. *_stream << ": " << d.message;
  41. if (d.message.back() != '\n')
  42. *_stream << std::endl;
  43. }
  44. else
  45. *_stream << std::endl;
  46. }
  47. consumer_stream::consumer_stream(const std::string& name, std::ostream& stream, bool ownsStream, bool autoRegister) :
  48. consumer (name, autoRegister),
  49. _stream (&stream),
  50. _ownsStream (ownsStream)
  51. { }
  52. consumer_stream::~consumer_stream()
  53. {
  54. if (_ownsStream && _stream)
  55. {
  56. delete _stream;
  57. _stream = nullptr;
  58. }
  59. }