• spdlog日式库


    1. 结构

    分为registry、loger、sink三个层次
    loger实例化后,调用spdlog::register则会全局注册,之后通过sdplog::get(LOGNAME)则可获取到对应的loger。
    sink实例化后,通过loger的构造函数可以将sink注册到loger中,支持多个sink注册到同一个loger中。

    • spdlog的默认logger
      在spdlog中,如果没有显式声明或注册任何logger,spdlog会自动创建一个名为空的logger,并将其注册为全局默认logger。这个logger将输出到标准输出,并使用默认的日志级别(即info级别)。因此,如果你没有显式声明或注册任何logger,你可以使用以下代码获取默认logger:
      auto logger = spdlog::get("default");
      
      • 1

    注意,如果你显式声明或注册了任何logger,那么默认logger将不再自动创建和注册。

    • spdlogn哪些接口会自动注册logger
      在spdlog中,以下接口会自动注册logger:
    1. spdlog::stdout_logger()和spdlog::stderr_logger():这些函数分别返回一个输出到标准输出和标准错误的logger,并使用默认名称"sink"注册该logger。

    2. spdlog::basic_logger():这个函数返回一个输出到文件的logger,并使用默认名称"sink"注册该logger。

    3. spdlog::rotating_logger()和spdlog::daily_logger():这些函数分别返回一个按文件大小和按日期滚动的logger,并使用默认名称"sink"注册该logger。如果你使用这些函数创建logger,你可以使用spdlog::get函数来获取已经注册的logger。例如,如果你使用spdlog::stdout_logger()函数创建了一个logger,你可以使用以下代码获取该logger:

    auto logger = spdlog::get("sink");
    
    • 1

    注意,如果你使用spdlog::basic_logger()、spdlog::rotating_logger()或spdlog::daily_logger()函数创建logger时指定了名称,那么该logger将使用指定的名称进行注册,而不是默认名称"sink"。

    2. 实现跨平台日志

    // Android example.
    #if defined(__ANDROID__)
    #include "spdlog/sinks/android_sink.h"
    void set_default()
    {
        std::string tag = "spdlog-android";
        auto android_logger = spdlog::android_logger_mt("android", tag);
        android_logger->set_level(spdlog::level::trace);
        spdlog::set_default_logger(android_logger);
    }
    #else
    void set_default()
    {
    }
    #endif
    int main()
    {
        set_default();
        spdlog::info("Welcome to spdlog!");
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    ref:

    1. 《spdlog》
    2. spglog example source code
  • 相关阅读:
    git的基本使用1
    安装IDEA -- MacBook点击IDEA意外退出
    记一次Netty堆外内存溢出OutOfDirectMemoryError
    3D Instance Segmentation via Multi-Task Metric Learning
    Rust-后端服务调试入坑记
    xilinx FPGA IOB约束使用以及注意事项
    map和set
    深度学习入门(四十七)计算机视觉——SSD和YOLO简介
    【C++】泛型算法(八)流迭代器iostream Iterator的使用:从文件中读取与写入
    【CV】第 18 章:使用 OpenCV 实用程序进行图像分析
  • 原文地址:https://blog.csdn.net/sinat_36304757/article/details/132742839