关键词不能为空

当前您在: 主页 > 英语 >

C++实现简易log日志子系统

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-17 23:35
tags:

-

2021年2月17日发(作者:crave)


C++


实现简易


log


日志系统




日志的作用



在软件开发周期中,


不管是前台还是后台,


系统一般会采用一个 持久化的日志系统来记


录运行情况。



在代码中嵌入


log


代码信息,主要记录下列信息:

< p>




1


)记录系统运行异常信息。





2


)记录系统运行状态信息。


< /p>



3


)记录系统运行性能指标。





通过对上述信息 分析和诊断,


我们能采取正确的手段来提高系统质量和系统性能。


由此


可见


log


日志在系统中的重要 地位和存在的必要性。





日志的类型与级别




2.1


日志的类型



主要分三大类:




安全类信息:记录系统边界交互行为和信息;



业务类信息:记录系统内部业务处理行为和信息





性能类信息:记录系统硬件对业务处理的支撑能力。




2.2


日志的类型



一般分五级:



ERROR


(错误)



此信息输出 后,


主体系统核心模块不能正常工作,


需要修复才能正常工作。




WARN


(警告)


:此信息输出后,系统一般模块存在问题,不影响系统运行。

< br>



INFO


(通知)


:此信息输出后,主要是记录系统运行状态等关联信息。



DEBUG


(调试)


:最细粒度的输出,除却上面各 种情况后,你希望输出的相关信息,都可以


在这里输出。




TRACE


(跟踪)


:最细粒度的输出,除却上面各种情况后,你希望输出的相关信息,都可以


在这 里输出。




在本文实现的简单日志系 统中不包括


DEBUG



TRACE< /p>



DEBUG


在编码过程中进行,


TRACE


不太需要。




2.3


常见的开源

< br>log


工具




C/C++


实现的开源


log


常见有:


C++


版的


log4j



log4cplus


< br>快速的



C++


日志库——< /p>


spdlog




C


日志函数库



——


zlog



C++


日志框架— —


Google Glog


等。




其中开源


log

工具


log4cplus


在项目中的使用较为常见,具体用 法和源码请参考网络的


资源,不再赘述。




3.


自实现


log


工具




主要针对


ERROR


(错误)



WARN


(警告)和


INFO


(通知)这三种日志类型实现了如下



C++


简易


log


工具。由源文件(



)和头文件(


logger.h


)组成。源码如下。




logger.h


文件:



/*



* logger.h



* brief


日记模块



1




*/



#ifndef



__logger__


#define



__logger__



#include


#include


#include


#include


#include


#include



///


/// brief


日志文件的类型



///


typedef enum log_rank {






INFO,






WARNING,






ERROR,






FATAL


}log_rank_t;



///


/// brief


初始化日志文件



/// param info_log_filename


信息文件的名字



/// param warn_log_filename


警告文件的名字



/// param error_log_filename


错误文件的名字



void initLogger(const std::string& info_log_filename,


















const std::string& warn_log_filename,


















const std::string& error_log_filename);



///


/// brief


日志系统类



///


class Logger {






friend void initLogger(const std::string& info_log_filename,





























const std::string& warn_log_filename,





























const std::string& erro_log_filename);







public:



//


构造函数







Logger(log_rank_t log_rank) : m_log_rank(log_rank) {};











~Logger();






2







///






/// brief


写入日志信息之前先写入的源代码文件名


,


行号


,


函数名







/// param log_rank


日志的等级







/// param line


日志发生的行号







/// param function


日志发生的函数







static std::ostream& start(log_rank_t log_rank,

































const int32 line,

































const std::string& function);







private:






///






/// brief


根据等级获取相应的日志输出流







///






static std::ostream& getStream(log_rank_t log_rank);











static std::ofstream m_info_log_file;






















static std::ofstream m_warn_log_file;





















static std::ofstream m_error_log_file;





















log_rank_t m_log_rank;




























};




///


/// brief


根据不同等级进行用不同的输出流进行读写



///


#define LOG(log_rank)





Logger(log_rank).start(log_rank, __LINE__, __FUNCTION__)



///


/// brief


利用日记进行检查的各种宏



///


#define CHECK(a)









































if(!(a)) {

















































LOG(ERROR) <<





























<< #a <<

















abort();









































}















































#define CHECK_NOTNULL(a)
































if( NULL == (a)) {










































LOG(ERROR) <<



























<< #a <<
















abort();









































}


3



///<


信息日子的输出流



///<


警告信息的输出流



///<


错误信息的输出流



///<


日志的信息的等级































































































-


-


-


-


-


-


-


-



本文更新与2021-02-17 23:35,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/663676.html

C++实现简易log日志子系统的相关文章