诸暨麻将添加redis
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

95 rader
2.7 KiB

  1. // Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
  2. // Distributed under the MIT License (http://opensource.org/licenses/MIT)
  3. #pragma once
  4. #ifndef SPDLOG_HEADER_ONLY
  5. #include <spdlog/sinks/stdout_sinks.h>
  6. #endif
  7. #include <spdlog/details/console_globals.h>
  8. #include <spdlog/details/pattern_formatter.h>
  9. #include <memory>
  10. namespace spdlog {
  11. namespace sinks {
  12. template<typename ConsoleMutex>
  13. SPDLOG_INLINE stdout_sink_base<ConsoleMutex>::stdout_sink_base(FILE *file)
  14. : mutex_(ConsoleMutex::mutex())
  15. , file_(file)
  16. , formatter_(details::make_unique<spdlog::pattern_formatter>())
  17. {}
  18. template<typename ConsoleMutex>
  19. SPDLOG_INLINE void stdout_sink_base<ConsoleMutex>::log(const details::log_msg &msg)
  20. {
  21. std::lock_guard<mutex_t> lock(mutex_);
  22. memory_buf_t formatted;
  23. formatter_->format(msg, formatted);
  24. fwrite(formatted.data(), sizeof(char), formatted.size(), file_);
  25. fflush(file_); // flush every line to terminal
  26. }
  27. template<typename ConsoleMutex>
  28. SPDLOG_INLINE void stdout_sink_base<ConsoleMutex>::flush()
  29. {
  30. std::lock_guard<mutex_t> lock(mutex_);
  31. fflush(file_);
  32. }
  33. template<typename ConsoleMutex>
  34. SPDLOG_INLINE void stdout_sink_base<ConsoleMutex>::set_pattern(const std::string &pattern)
  35. {
  36. std::lock_guard<mutex_t> lock(mutex_);
  37. formatter_ = std::unique_ptr<spdlog::formatter>(new pattern_formatter(pattern));
  38. }
  39. template<typename ConsoleMutex>
  40. SPDLOG_INLINE void stdout_sink_base<ConsoleMutex>::set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter)
  41. {
  42. std::lock_guard<mutex_t> lock(mutex_);
  43. formatter_ = std::move(sink_formatter);
  44. }
  45. // stdout sink
  46. template<typename ConsoleMutex>
  47. SPDLOG_INLINE stdout_sink<ConsoleMutex>::stdout_sink()
  48. : stdout_sink_base<ConsoleMutex>(stdout)
  49. {}
  50. // stderr sink
  51. template<typename ConsoleMutex>
  52. SPDLOG_INLINE stderr_sink<ConsoleMutex>::stderr_sink()
  53. : stdout_sink_base<ConsoleMutex>(stderr)
  54. {}
  55. } // namespace sinks
  56. // factory methods
  57. template<typename Factory>
  58. SPDLOG_INLINE std::shared_ptr<logger> stdout_logger_mt(const std::string &logger_name)
  59. {
  60. return Factory::template create<sinks::stdout_sink_mt>(logger_name);
  61. }
  62. template<typename Factory>
  63. SPDLOG_INLINE std::shared_ptr<logger> stdout_logger_st(const std::string &logger_name)
  64. {
  65. return Factory::template create<sinks::stdout_sink_st>(logger_name);
  66. }
  67. template<typename Factory>
  68. SPDLOG_INLINE std::shared_ptr<logger> stderr_logger_mt(const std::string &logger_name)
  69. {
  70. return Factory::template create<sinks::stderr_sink_mt>(logger_name);
  71. }
  72. template<typename Factory>
  73. SPDLOG_INLINE std::shared_ptr<logger> stderr_logger_st(const std::string &logger_name)
  74. {
  75. return Factory::template create<sinks::stderr_sink_st>(logger_name);
  76. }
  77. } // namespace spdlog