【项目二】C++高性能服务器开发——日志系统(日志器,日志级别,日志事件)

知识点备忘录

其实也没啥

操作记录

在乌邦图上写的,先是模仿sylar创建了目录
在这里插入图片描述
进入sylar文件夹,有今天写的log.h头文件,还有log.cc文件,.h文件只保留了类的声明和基本接口定义,将实现细节移到了 log.cc 文件中。
在这里插入图片描述
其中log_test.cpp是为了测试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.返回日志事件发生的事件,单位ms
	uint32_t getElapse() const {return m_elapse;}
	//4.返回产生日志事件的线程ID
	uint32_t getThreadId() const {return m_threadId;}
	//5.返回产生日志事件的协程ID
	uint32_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;//表示程序启动到现在的ms
	uint32_t m_threadId = 0;//表示产生日志事件的线程ID
	uint32_t m_fiberId = 0;//表示产生日志事件的协程ID
	uint64_t m_time;//表示日志事件产生的时间戳
	LogLevel::Level m_level;//表示日志级别
};

//日志器
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;
};
#endif

log.cc文件如下:

#include "log.h"
#include<iostream>
//LogEvent实现
//日志构造函数的实现
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){
}
//Logger实现
//实现构造函数
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;
}

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;
}

正常打印输出了日志输出模拟,运行成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值