【项目二】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

相关文章

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

golang 日志log与logrus示例详解

《golang日志log与logrus示例详解》log是Go语言标准库中一个简单的日志库,本文给大家介绍golang日志log与logrus示例详解,感兴趣的朋友一起看看吧... 目录一、Go 标准库 log 详解1. 功能特点2. 常用函数3. 示例代码4. 优势和局限二、第三方库 logrus 详解1.

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用