本文主要是介绍【项目二】C++高性能服务器开发——日志系统(日志器,日志级别,日志事件),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
知识点备忘录
其实也没啥
操作记录
在乌邦图上写的,先是模仿sylar创建了目录
进入sylar文件夹,有今天写的log.h头文件
其中log_test.cpp是为了测试log.h能否正常运行建的,只是个测试文件
log.h写了三个类,日志级别,日志事件,日志器
log.h头文件如下:
#ifndef __SYLAR_LOG_H_
#define __SYLAR_LOG_H_#include <string>
#include <stdint.h>
#include <memory>
#include <iostream>//日志级别
class LogLevel{
public:enum Level{UNKNOW = 0,//未知DEBUG = 1,//调试INFO = 2,//普通WARN = 3,//警告ERROR = 4,//错误FATAL = 5//灾难};
};//日志事件
//通常包含日志发生的具体信息
class LogEvent{
public://一个智能指针typedef std::shared_ptr<LogEvent> ptr;//构造函数LogEvent(LogLevel::Level level//日志级别//日志发生源代码文件名,日志发生的源代码中的行号,自程序启动以来的时间, const char* file, int32_t line, uint32_t elapse//产生日志事件的线程ID,产生日志事件的协程ID,日志事件的时间戳, uint32_t thread_id, uint32_t fiber_id, uint64_t time);//成员函数//1.返回日志发生的源文件名const char* getFile() const {return m_file;}//2.返回日志发生的代码行号int32_t getLine() const {return m_line;}//3.返回日志事件发生的事件,单位msuint32_t getElapse() const {return m_elapse;}//4.返回产生日志事件的线程IDuint32_t getThreadId() const {return m_threadId;}//5.返回产生日志事件的协程IDuint32_t getFiberId() const {return m_fiberId;}//6.返回日志事件的时间戳uint64_t getTime() const {return m_time;}//7.返回日志事件的级别LogLevel::Level getLevel() const {return m_level;}private:const char* m_file = nullptr;//表示日志事件的源文件名int32_t m_line = 0;//表示在源文件中的行号uint32_t m_elapse = 0;//表示程序启动到现在的msuint32_t m_threadId = 0;//表示产生日志事件的线程IDuint32_t m_fiberId = 0;//表示产生日志事件的协程IDuint64_t m_time;//表示日志事件产生的时间戳LogLevel::Level m_level;//表示日志级别
};//日志构造函数的实现
LogEvent::LogEvent(LogLevel::Level level, const char* file, int32_t line, uint32_t elapse, uint32_t thread_id, uint32_t fiber_id, uint64_t time):m_level(level),m_file(file),m_line(line),m_elapse(elapse),m_threadId(thread_id),m_fiberId(fiber_id),m_time(time){
}//日志器
class Logger{
public://定义智能指针,操作Logger的对象typedef std::shared_ptr<Logger> ptr;//构造函数//未指定则给个默认名称root,这里引用生为了避免不必要的拷贝操作,使用const是为了规定这个名称在内部不会被改变Logger(const std::string& name = "root");//成员函数const std::string& getName() const {return m_name;}LogLevel::Level getLevel() const {return m_level;}void setLevel(LogLevel::Level val) {m_level = val;}//定义一个输出日志的方法,传入想要查看的最大日志级别void log(LogEvent::ptr event);
private://m_开头生一个私有变量的规范std::string m_name;//日志器能输出的最大日志级别LogLevel::Level m_level;
};
//实现构造函数
Logger::Logger(const std::string& name):m_name(name)//这里指定日志器一个自身默认级别是DEBUG,m_level(LogLevel::DEBUG){
}
//实现成员函数log()即输出方法
void Logger::log(LogEvent::ptr event){if(event->getLevel() >= m_level)std::cout << "日志输出模拟" << std::endl;
}#endif
log_test.cpp文件如下
#include "log.h"
//测试
int main(int argc, char** argv){//创建一个日志事件LogEvent::ptr event(new LogEvent(LogLevel::WARN, 0, 1, 2, 3, 4, time(0)));Logger::ptr lg(new Logger("hkq"));lg->log(event);lg->setLevel(LogLevel::ERROR);lg->log(event);return 0;
}
正常打印输出了日志输出模拟,运行成功
这篇关于【项目二】C++高性能服务器开发——日志系统(日志器,日志级别,日志事件)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!