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

2024-09-07 08:20

本文主要是介绍【项目二】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++高性能服务器开发——日志系统(日志器,日志级别,日志事件)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144554

相关文章

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

C++作用域和标识符查找规则详解

《C++作用域和标识符查找规则详解》在C++中,作用域(Scope)和标识符查找(IdentifierLookup)是理解代码行为的重要概念,本文将详细介绍这些规则,并通过实例来说明它们的工作原理,需... 目录作用域标识符查找规则1. 普通查找(Ordinary Lookup)2. 限定查找(Qualif

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer