spdlog源码解析

基础抽象

sink
#level_t level_
+void log(const details::log_msg &msg)
+void flush()
+void set_pattern(const std::string &pattern)
+void set_formatter(std::unique_ptr sink_formatter)
+void set_level(level::level_enum log_level)
+level::level_enum level()
+bool should_log(level::level_enum msg_level)
formatter
+void format(const details::log_msg &msg, memory_buf_t &dest)
+std::unique_ptr clone()

其中sink中的log,flush,set_pattern,set_formatter为纯虚函数
formatter为虚类

base_sink

base_sink<Mutex>
#unique_ptr formatter_
#Mutex mutex_
#void sink_it_(const details::log_msg &msg)
#void flush_()
#void set_pattern_(const std::string &pattern)
#void set_formatter_(std::unique_ptr sink_formatter)
sink

base_sink模板类继承了sink,模板参数提供了同步机制。其实现了基类中的log,flush,set_pattern和set_formatter抽象方法,log方法中会调用抽象方法sink_it_,flush方法调用抽象方法flush_

template <typename Mutex>
void SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::log(const details::log_msg &msg) {
    std::lock_guard<Mutex> lock(mutex_);
    sink_it_(msg);
}

template <typename Mutex>
void SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::flush() {
    std::lock_guard<Mutex> lock(mutex_);
    flush_();
}

template <typename Mutex>
void SPDLOG_INLINE spdlog::sinks::base_sink<Mutex>::set_pattern(const std::string &pattern) {
    std::lock_guard<Mutex> lock(mutex_);
    set_pattern_(pattern);
}

template <typename Mutex>
void SPDLOG_INLINE
spdlog::sinks::base_sink<Mutex>::set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) {
    std::lock_guard<Mutex> lock(mutex_);
    set_formatter_(std::move(sink_formatter));
}

相关推荐

  1. spdlog

    2024-06-10 05:54:04       31 阅读
  2. spdlog学习

    2024-06-10 05:54:04       53 阅读
  3. SpringBoot

    2024-06-10 05:54:04       60 阅读
  4. ConcurrentHashMap

    2024-06-10 05:54:04       66 阅读
  5. SharedPreferences

    2024-06-10 05:54:04       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-10 05:54:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-10 05:54:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-10 05:54:04       82 阅读
  4. Python语言-面向对象

    2024-06-10 05:54:04       91 阅读

热门阅读

  1. Spring Boot集成thymeleaf快速入门demo

    2024-06-10 05:54:04       36 阅读
  2. 排查服务器cpu运行过高

    2024-06-10 05:54:04       26 阅读
  3. go语言切片去重的3种方式总结

    2024-06-10 05:54:04       29 阅读
  4. SpringMVC的执行流程

    2024-06-10 05:54:04       31 阅读
  5. mysql数据库安装_修改密码_忘记密码(修改)

    2024-06-10 05:54:04       35 阅读
  6. Android基础-binder机制

    2024-06-10 05:54:04       29 阅读
  7. Python中的上下文管理器(contextlib)模块

    2024-06-10 05:54:04       34 阅读
  8. ipc-test.bk and mmap is also similar.

    2024-06-10 05:54:04       25 阅读
  9. 补篇协程:susend 挂起函数的深入理解

    2024-06-10 05:54:04       45 阅读
  10. 后端返回图片格式乱码

    2024-06-10 05:54:04       41 阅读
  11. Stable Diffusion避坑指南

    2024-06-10 05:54:04       44 阅读