basic_file_sink.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
  2. // Distributed under the MIT License (http://opensource.org/licenses/MIT)
  3. #pragma once
  4. #include <spdlog/details/file_helper.h>
  5. #include <spdlog/details/null_mutex.h>
  6. #include <spdlog/sinks/base_sink.h>
  7. #include <spdlog/details/synchronous_factory.h>
  8. #include <mutex>
  9. #include <string>
  10. namespace spdlog {
  11. namespace sinks {
  12. /*
  13. * Trivial file sink with single file as target
  14. */
  15. template<typename Mutex>
  16. class basic_file_sink final : public base_sink<Mutex>
  17. {
  18. public:
  19. explicit basic_file_sink(const filename_t &filename, bool truncate = false, const file_event_handlers &event_handlers = {});
  20. const filename_t &filename() const;
  21. protected:
  22. void sink_it_(const details::log_msg &msg) override;
  23. void flush_() override;
  24. private:
  25. details::file_helper file_helper_;
  26. };
  27. using basic_file_sink_mt = basic_file_sink<std::mutex>;
  28. using basic_file_sink_st = basic_file_sink<details::null_mutex>;
  29. } // namespace sinks
  30. //
  31. // factory functions
  32. //
  33. template<typename Factory = spdlog::synchronous_factory>
  34. inline std::shared_ptr<logger> basic_logger_mt(
  35. const std::string &logger_name, const filename_t &filename, bool truncate = false, const file_event_handlers &event_handlers = {})
  36. {
  37. return Factory::template create<sinks::basic_file_sink_mt>(logger_name, filename, truncate, event_handlers);
  38. }
  39. template<typename Factory = spdlog::synchronous_factory>
  40. inline std::shared_ptr<logger> basic_logger_st(
  41. const std::string &logger_name, const filename_t &filename, bool truncate = false, const file_event_handlers &event_handlers = {})
  42. {
  43. return Factory::template create<sinks::basic_file_sink_st>(logger_name, filename, truncate, event_handlers);
  44. }
  45. } // namespace spdlog
  46. #ifdef SPDLOG_HEADER_ONLY
  47. # include "basic_file_sink-inl.h"
  48. #endif