文章目录
- 日志等级类
- 设计
- 实现
- 测试
- 日志消息类
- 设计
- 实现
日志等级类
设计
日志等级一共分7个等级
- UNKNOW = 0
- OFF 关闭所有日志输出
- DEBUG 调试等级
- INFO 提示等级
- WARN 警告等级
- ERROR 错误等级
- FATAL 致命等级
- OFF 关闭所有日志的输出
每一个项目都会设置一个默认输出等级,只有当输出的日志内容大于等于这个默认输出等级时,才会对这一条日志进行实质性的输出
提供一个接口,将对应的等级枚举转换为一个字符串
实现
/*日志等级类的实现1. 定义枚举类,枚举出日志的等级2. 提供转换接口,将枚举转换成对应的字符串
*/namespace Xulog
{class LogLevel{public:enum class value{UNKNOW = 0,DEBUG,INFO,WARN,ERROR,FATAL,OFF};static const char *toString(LogLevel::value level){switch (level){case LogLevel::value::DEBUG:return "DEBUG";break;case LogLevel::value::INFO:return "INFO";break;case LogLevel::value::WARN:return "WARN";break;case LogLevel::value::ERROR:return "ERROR";break;case LogLevel::value::FATAL:return "FATAL";break;case LogLevel::value::OFF:return "OFF";break;}return "UNKNOW";}};
}
测试
std::cout << Xulog::LogLevel::toString(Xulog::LogLevel::value::DEBUG) << std::endl;std::cout << Xulog::LogLevel::toString(Xulog::LogLevel::value::INFO) << std::endl;std::cout << Xulog::LogLevel::toString(Xulog::LogLevel::value::WARN) << std::endl;std::cout << Xulog::LogLevel::toString(Xulog::LogLevel::value::ERROR) << std::endl;std::cout << Xulog::LogLevel::toString(Xulog::LogLevel::value::FATAL) << std::endl;std::cout << Xulog::LogLevel::toString(Xulog::LogLevel::value::OFF) << std::endl;std::cout << Xulog::LogLevel::toString(Xulog::LogLevel::value::UNKNOW) << std::endl;
日志消息类
设计
中间存储日志所需的各项要素
- 日志输出时间
- 日志等级
- 源文件名称
- 源代码行号
- 线程ID
- 实际的日志主体消息
- 日志器名称
可以分别进行过滤,定位代码错误的位置,具体的日志主题消息
实现
/*日志消息类的实现,存储中间日志信息1. 日志输出时间2. 日志等级3. 源文件名称4. 源代码行号5. 线程ID6. 实际的日志主体消息7. 日志器名称
*/
#pragma once#include <iostream>
#include <thread>
#include <string>
#include "level.hpp"
#include "util.hpp"namespace Xulog
{struct LogMsg{sizei_t _ctime; // 日志产生的时间戳size_t _line; // 行号std::thread::id _tid; // 线程IDLogLevel::value _level; // 日志等级std::string _file; // 源文件名称std::string _logger; // 日志器std::string _payload; // 有效载荷数据LogMsg(LogLevel::value level,size_t line,const std::string file,const std::string logger,const std::string msg) : _ctime(Util::Date::getTime()),_level(level),_line(line),_tid(std::this_thread::get_id()),_file(file),_logger(logger),_payload(msg){}};
}