c_logger.cxx 930 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. //
  2. // c_logger.cxx
  3. // logging
  4. //
  5. // Created by Sam Jaffe on 4/1/19.
  6. //
  7. #include "logger/c_logger.h"
  8. #include "common.h"
  9. #include "logger/logpacket.h"
  10. #include "logger_impl.h"
  11. using namespace logging;
  12. c_logger::c_logger(std::string const & name, std::shared_ptr<logger_impl> impl)
  13. : logger_name_(name), impl_(impl) {}
  14. c_logger::~c_logger() {
  15. if (impl_) impl_->flush();
  16. }
  17. void c_logger::vlognf(level level, size_t num_bytes, char const * fmt,
  18. va_list args) {
  19. if (!impl_->should_log(level)) return;
  20. const std::unique_ptr<char[]> data(new char[num_bytes]);
  21. int n = vsnprintf(data.get(), num_bytes, fmt, args);
  22. if (n >= 0) {
  23. data[num_bytes - 1] = '\0';
  24. impl_->write({now(), level, {}, logger_name_, {data.get()}});
  25. }
  26. }
  27. void c_logger::log(level level, std::string const & msg) {
  28. impl_->write({now(), level, {}, logger_name_, msg});
  29. }
  30. void c_logger::flush() { impl_->flush(); }