设为首页 加入收藏

TOP

01、spdlog源码阅读——registry注册表(二)
2023-08-06 07:49:40 】 浏览:757
Tags:spdlog registry
器时,其他线程不会同时进行刷新操作。 // 回调函数是 this->flush_all(),表示要执行日志器的刷新操作。 template<typename Rep, typename Period> void flush_every(std::chrono::duration<Rep, Period> interval) { std::lock_guard<std::mutex> lock(flusher_mutex_); auto clbk = [this]() { this->flush_all(); }; // 这是一个定时器的成员变量,用于设置定时器,并将回调函数和时间间隔传递给 periodic_worker 构造函数。 // periodic_worker 是 spdlog 库中的一个类,用于创建周期性定时器。 periodic_flusher_ = details::make_unique<periodic_worker>(clbk, interval); } // 设置错误处理函数(Error Handler)。 // 这是一个函数指针或函数对象参数,用于表示错误处理函数。错误处理函数是一个用户定义的函数,用于处理在 spdlog 库中可能发生的错误情况 // using err_handler = std::function<void(const std::string &err_msg)>;是一个函数对象类型,用于表示一个接受 const std::string & 类型参数的无返回值函数。 void set_error_handler(err_handler handler); // 对所有已注册的日志器应用一个指定的函数。 // 对所有已创建的日志器进行一些特定的操作,例如更改日志器的配置、设置日志级别等。 void apply_all(const std::function<void(const std::shared_ptr<logger>)> &fun); // 将所有已注册的日志器的缓冲日志消息刷新到输出目标。 void flush_all(); // 从日志器注册表中移除指定名称的日志器。 void drop(const std::string &logger_name); // 从日志器注册表中移除所有日志器。 void drop_all(); // clean all resources and threads started by the registry // 关闭所有已注册的日志器并释放相关资源。 void shutdown(); // 获取一个递归互斥锁(recursive mutex)对象的引用。 // 递归互斥锁是一种特殊类型的互斥锁,允许同一线程多次对互斥锁进行加锁,而不会导致死锁。 std::recursive_mutex &tp_mutex(); // 指定是否启用自动注册日志器功能。 // 为true时,通过 spdlog::create 创建的日志器将自动注册到全局的日志器注册表中,方便后续的查找和使用。 // 为false时,通过 spdlog::create 创建的日志器将不会自动注册到日志器注册表中,需要手动调用其他函数(如 spdlog::register_logger)将其注册 void set_automatic_registration(bool automatic_registration); // set levels for all existing/future loggers. global_level can be null if should not set. // 可以同时设置多个日志器的日志级别,并可以设置全局的日志级别。这样可以方便地统一管理多个日志器的日志级别,并灵活地控制日志输出的详细程度。 // using log_levels = std::unordered_map<std::string, level::level_enum>;多个日志级别配置,map类型 void set_levels(log_levels levels, level::level_enum *global_level); // 获取日志器注册表的单例实例。 // 日志器注册表是全局唯一的,为了方便使用,spdlog 使用了单例模式,即只允许存在一个注册表实例。 static registry &instance(); // 根据环境变量设置日志器的日志级别。 // 使用环境变量来配置日志级别具有灵活性,因为它允许在不修改代码的情况下更改日志级别。 // 通过在运行时设置环境变量,可以动态地调整日志输出的详细程度,方便在不同的场景或部署环境下进行日志记录。 void apply_logger_env_levels(std::shared_ptr<logger> new_logger); private: registry(); ~registry(); // 用于检查是否存在指定名称的日志器,并在存在时抛出异常。 // 通过调用 throw_if_exists_ 函数,并传递一个日志器的名称作为参数,可以检查注册表中是否已经存在具有相同名称的日志器。 // 如果存在,该函数会抛出异常,提示名称冲突,防止创建重名的日志器。 void throw_if_exists_(const std::string &logger_name); // 将指定的日志器注册到日志器注册表中。 void register_logger_(std::shared_ptr<logger> new_logger); // 从配置中设置日志器的日志级别。 bool set_level_from_cfg_(logger *logger); // 对日志器注册表进行线程同步的互斥锁。对日志器刷新操作进行线程同步的互斥锁。 std::mutex logger_map_mutex_, flusher_mutex_; // 递归互斥锁对象的声明。 std::recursive_mutex tp_mutex_; // 日志无序映射 std::unordered_map<std::string, std::shared_ptr<logger>> loggers_; // 保存多个日志器的名称及对应的日志级别。 log_levels log_levels_; // formatter 是一个抽象基类,用于控制日志消息的格式化方式 // 独占指针 // 由于 std::unique_ptr 具有独占性,即同一时刻只有一个 std::unique_ptr 可以拥有一个资源 // 因此 formatter_ 对象可以确保在其生命周期内,只有一个智能指针持有 formatter 对象。 // 这样可以避免多个指针同时对同一个资源进行管理,确保资源的正确释放。 std::unique_ptr<formatter> formatter_; // 全局日志级别变量的声明和初始化。默认为info spdlog::level::level_enum global_log_level_ = level::info; // 日志级别变量的声明和初始
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇vs(visual stuiod)中vc++工程的Fi.. 下一篇C++项目实战之职工管理系统

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目