Sylar C++高性能服务器学习记录02 【日志管理-代码分析篇】

2024-06-01 1368阅读

早在19年5月就在某站上看到sylar的视频了,一直认为这是一个非常不错的视频。

由于本人一直是自学编程,基础不扎实,也没有任何人的督促,没能坚持下去。

每每想起倍感惋惜,遂提笔再续前缘。

为了能更好的看懂sylar,本套笔记会分两步走,每个系统都会分为两篇博客。

分别是【知识储备篇】和【代码分析篇】

(ps:纯粹做笔记的形式给自己记录下,欢迎大家评论,不足之处请多多赐教)

QQ交流群:957100923

本篇内容很细,与原有代码有偏差,带有自己理解的情况下编写的代码。

本文重在 “思考如何思考”,这样才能把知识消化在自己的 “胃” 里

当然这里时刻提醒自己要做 “黄昏中起飞的猫头鹰”

日志管理-代码分析

1.类图概括

首先列出日志系统中的类,这里只是简单列出大致的关系并不是最正确的"类图"(或者算不上"类图")

列出这张图意在有一个大致的了解,便于后续的理解。

Sylar C++高性能服务器学习记录02 【日志管理-代码分析篇】

2.明确目的

想必大家都感觉某站上的视频难啃吧。除了视频声音较小之外更重要的是UP主在讲解时并没有先说明要做什么,要做成什么样,也就是大家不明白目的是什么。导致视频开始时处于一脸懵的状态,没熬到最后就不知道在说什么。最近看到一个视频是关于雷军的,大致意思是:“我读书时也有不懂得地方,直接跳过,通篇读完会恍然大悟,然后再读一边。” 这句话多少给了我点动力,所以打算开始写这一系列的博客。

言归正传,日志系统无非就是:

需要一个方法输出指定的信息方便我们观察程序的运行状态

最简单的方法:

//c++ 风格日志输出
std::cout = m_level){
        std::cout log(event); //日志输出模拟
    //将日志器级别改为ERROR
    lg->setLevel(LogLevel::ERROR);
    //此时 WARNlog(event);
    return 0;
}

接下来我们再来思考,以上代码关于级别的已经初步处理了,我们还缺少什么?

是的 没错 线上环境不仅仅是将日志打印在控制台,还需要能打印到本地磁盘,或者远程日志服务器等等。

所以我们需要在Logger类中进行设计,起码需要有两种类型的“适配器”来承接各自的业务。

1.一个适配器负责打印日志到控制台 StdoutLogAppender

2.另一个负责打印到本地磁盘文件 FileLogAppender

3.为了未来的扩展性,所以这里要抽象一个基类来实现多态 LogAppender

编写适配器基类:LogAppender

所以接下来思考,LogAppender类需要什么。

0.是否需要私有字段 (目前好像不需要)

1.是否需要智能指针 (明显这个类是需要使用该类指针指向子类对象的所以肯定需要)

2.是否需要有参构造 (目前好像不需要)

3.是否需要析构函数 (应该是需要的,因为这个是基类需要被继承,不仅仅要析构函数,还要虚析构!!!)

4.是否需要get/set方法 (目前好像不需要,连私有字段都没更不用get/set了)

5.是否需要什么方法 (应该是需要的,起码要一个日志输出的方法而且没有实现体,应该定义为纯虚函数)

好!老办法开始写:

class LogAppender{
public:
	//定义智能指针
	typedef std::shared_ptr ptr;
	//虚析构 空函数没有复杂逻辑所以 直接定义掉
	virtual ~LogAppender(){}
	//输出函数为纯虚函数,因为具体实现各个子类不一样,由各个子类自己决定
	virtual void log(LogEvent::ptr event) = 0;
};
编写输出到控制台适配器类:StdoutLogAppender
//输出到控制台的Appender
class StdoutLogAppender : public LogAppender {
public:
    typedef std::shared_ptr ptr;
    //这里的override用于表示是重写父类方法的
    void log(LogEvent::ptr event) override;
};
void StdoutLogAppender::log(LogEvent::ptr event){
	std::cout 
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]