[C++]——同步异步日志系统(4)

07-12 819阅读

同步异步日志系统

  • 一、日志等级模块设计
  • 二、日志消息类设计

    一、日志等级模块设计

    1. 定义出日志系统所包含的所有日志等级分别为:(7个等级)
    • UNKNOW=0,未知等级的日志
    • DRBUG ,调试等级的日志
    • INFO ,提示等级的日志
    • WARN ,警告等级的日志
    • ERROR ,错误等级的日志
    • FATAL ,致命错误等级的日志
    • OFF,关闭所有⽇志输出

      每一个项目中都会设置一个默认的日志输出等级,只有输出的日志等级大于等于默认限制等级的时候才可以进行输出。

      1. 提供一个接口,将对应等级进行枚举,转化为一个对应的字符串
      2. 首先需要把架子搭起来,功能先声明好。
      /*
      1.定义枚举类,枚举出日志等级
      2.提供转换接口,将枚举转换位对应的字符串
      */
      namespace logslearn{
              //等级模块
              class level{
              public:
              //定义枚举类
              enum class value{};
              //转换接口
              static const char *tostring(level::value level);
          };
      }
      
      1. 其次在实现各个功能。
      /*
      1.定义枚举类,枚举出日志等级
      2.提供转换接口,将枚举转换位对应的字符串
      */
      namespace logslearn
      {
          // 等级模块
          class loglevel
          {
          public:
              // 定义枚举类
              enum class value
              {
                  UNKNOW = 0, // 未知等级的日志
                  DRBUG,      // 调试等级的日志
                  INFO,       // 提示等级的日志
                  WARN,       // 警告等级的日志
                  ERROR,      // 错误等级的日志
                  FATAL,      // 致命错误等级的日志
                  OFF,        // 关闭所有⽇志输出
              };
              // 转换接口
              static const char *tostring(loglevel::value level)
              {
                  switch (level)
                  {
                  case loglevel::value::DRBUG:
                      return "DRBUG";
                  case loglevel::value::INFO:
                      return "INFO";
                  case loglevel::value::WARN:
                      return "WARN";
                  case loglevel::value::ERROR:
                      return "ERROR";
                  case loglevel::value::FATAL:
                      return "FATAL";
                  case loglevel::value::OFF:
                      return "OFF";
                  }
                  // 未知等级的打印
                  return "UNKNOW";
              }
          };
      }
      
      1. 我们每次编写完一个模块后,要对其进行单元测试,确保程序的准确性。
      //测试代码
      #include "util.hpp"
      #include "level.hpp"
      int main()
      {
          //等级模块测试
          std::cout
          //日志消息模块
          struct LogMsg
          {
              time_t _ctime;//日志产生的时间戳
              loglevel::value _level;//日志产生的等级
              size_t _line;//行号
              std::thread::id _tid;//线程id
              std::string _file;//源文件
              std::string _logger;//日志器名称
              std::string _payload;//有效消息数据
              //初始化列表
              LogMsg(loglevel::value leven,size_t line,const std::string file,const std::string logger,const std::string msg):
              _ctime(logsLearn::util::Data::now()),
              _level(leven),
              _line(line),
              _tid(std::this_thread::get_id()),
              _file(file),
              _logger(logger),
              _payload(msg)
              {}
          };
      }
      
          //消息类模块构造
          logslearn::LogMsg(logslearn::loglevel::value::DRBUG, 123,"main.c","root","我错了");
          std::cout

[C++]——同步异步日志系统(4)

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]