版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业C+实现简易log日志系统1.log日志的作用在软件开发周期中,不管是前台还是后台,系统一般会采用一个持久化的日志系统来记录运行情况。在代码中嵌入log代码信息,主要记录下列信息: (1)记录系统运行异常信息。 (2)记录系统运行状态信息。(3)记录系统运行性能指标。 通过对上述信息分析和诊断,我们能采取正确的手段来提高系统质量和系统性能。由此可见log日志在系统中的重要地位和存在的必要性。2.log日志的类型与级别2.1日志的类型主要分三大类: 安全类信息:记录系统边
2、界交互行为和信息;业务类信息:记录系统内部业务处理行为和信息 ;性能类信息:记录系统硬件对业务处理的支撑能力。2.2日志的类型一般分五级: ERROR(错误):此信息输出后,主体系统核心模块不能正常工作,需要修复才能正常工作。 WARN(警告):此信息输出后,系统一般模块存在问题,不影响系统运行。 INFO(通知):此信息输出后,主要是记录系统运行状态等关联信息。DEBUG(调试):最细粒度的输出,除却上面各种情况后,你希望输出的相关信息,都可以在这里输出。 TRACE(跟踪):最细粒度的输出,除却上面各种情况后,你希望输出的相关信息,都可以在这里输出。在本文实现的简单日志系统中不包括DEBU
3、G和TRACE。DEBUG在编码过程中进行,TRACE不太需要。2.3常见的开源log工具C/C+实现的开源log常见有:C+版的log4j 的log4cplus、快速的 C+ 日志库spdlog、纯C日志函数库 zlog、C+日志框架Google Glog等。其中开源log工具log4cplus在项目中的使用较为常见,具体用法和源码请参考网络的资源,不再赘述。3.自实现log工具主要针对ERROR(错误)、WARN(警告)和INFO(通知)这三种日志类型实现了如下的C+简易log工具。由源文件(logger.cpp)和头文件(logger.h)组成。源码如下。logger.h文件:/* *
4、logger.h * brief 日记模块 */#ifndef _logger_#define _logger_#include #include #include #include #include #include / brief 日志文件的类型/typedef enum log_rank INFO, WARNING, ERROR, FATALlog_rank_t;/ brief 初始化日志文件/ param info_log_filename 信息文件的名字/ param warn_log_filename 警告文件的名字/ param error_log_filename 错误文件的名
5、字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:/构
6、造函数 Logger(log_rank_t log_rank) : m_log_rank(log_rank) ; Logger(); / / 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 根据等级获取相应的日志输出
7、流 / 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
8、).start(log_rank, _LINE_, _FUNCTION_)/ brief 利用日记进行检查的各种宏/#define CHECK(a) if(!(a) LOG(ERROR) CHECK failed endl #a = (a) endl; abort(); #define CHECK_NOTNULL(a) if( NULL = (a) LOG(ERROR) CHECK_NOTNULL failed #a = NULL endl; abort(); #define CHECK_NULL(a) if( NULL != (a) LOG(ERROR) CHECK_NULL failed
9、endl #a != NULL endl; abort(); #define CHECK_EQ(a, b) if(!(a) = (b) LOG(ERROR) CHECK_EQ failed endl #a = (a) endl #b = (b) endl; abort(); #define CHECK_NE(a, b) if(!(a) != (b) LOG(ERROR) CHECK_NE failed endl #a = (a) endl #b = (b) endl; abort(); #define CHECK_LT(a, b) if(!(a) (b) LOG(ERROR) CHECK_LT
10、 failed #a = (a) endl #b = (b) (b) LOG(ERROR) CHECK_GT failed endl #a = (a) endl #b = (b) endl; abort(); #define CHECK_LE(a, b) if(!(a) = (b) LOG(ERROR) CHECK_LE failed endl #a = (a) endl #b = (b) = (b) LOG(ERROR) CHECK_GE failed endl #a = (a) endl #b = (b) endl; abort(); #define CHECK_DOUBLE_EQ(a,
11、b) do CHECK_LE(a), (b)+0.0001L); CHECK_GE(a), (b)-0.0001L); while (0)#endiflogger.cpp文件源码:#include logger.h#include #include std:ofstream Logger:m_error_log_file;std:ofstream Logger:m_info_log_file;std:ofstream Logger:m_warn_log_file;void initLogger(const std:string &info_log_filename, const std:str
12、ing &warn_log_filename, const std:string &error_log_filename) Logger:m_info_log_file.open(info_log_filename.c_str(); Logger:m_warn_log_file.open(warn_log_filename.c_str(); Logger:m_error_log_file.open(error_log_filename.c_str();std:ostream& Logger:getStream(log_rank_t log_rank) return (INFO = log_ra
13、nk) ? (m_info_log_file.is_open() ? m_info_log_file : std:cout) : (WARNING = log_rank ? (m_warn_log_file.is_open() ? m_warn_log_file : std:cerr) : (m_error_log_file.is_open() ? m_error_log_file : std:cerr);std:ostream& Logger:start(log_rank_t log_rank, const int32 line, const std:string &function) ti
14、me_t tm; time(&tm); char time_string128; ctime_r(&tm, time_string); return getStream(log_rank) time_string function ( function ) line line std:flush;Logger:Logger() getStream(m_log_rank) std:endl std:flush; if (FATAL = m_log_rank) m_info_log_file.close(); m_info_log_file.close(); m_info_log_file.close(); abort(); 使用方法如下:第一步,通过给定三个日志文件的路径,调用初始化函数initLogger进行日志文件的创建。第二步,在需要插入日志的地方调用LOG(TYPE)”your info”;即可。your info表示你要输入到日志文件中的信息。以WARN日志为例,输出的信息大致如下:Sun Jul 5 09:49:48 2015 function (getNextTask) line 75 n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年购销合同:某钢铁企业向供应商订购0万吨原材料2篇
- 二零二五年度高铁站房PC构件预制及吊装工程合同2篇
- 二零二五年度物业管理顾问合同(含交通枢纽管理)2篇
- 二零二五版货车司机意外伤害赔偿合同范本3篇
- 二零二五年度绿色环保型二手房按揭交易合同模板3篇
- 二零二五食堂承包合同(大路食堂运营管理)3篇
- 二零二五版二手房买卖与家具选购代理合同3篇
- 税务局2025年度企业社会责任报告编制合同
- 二零二五年度智慧社区家居安装合同规范3篇
- 二零二五年度虫草科研合作与技术转移合同范本3篇
- 《新生儿预防接种》课件
- 小学五年级上册数学寒假作业每日一练
- DB1303T382-2024 创伤性休克患者护理指南
- 2024年03月内蒙古中国银行内蒙古分行春季校园招考笔试历年参考题库附带答案详解
- 2024-2025学年华东师大新版八年级上册数学期末复习试卷(含详解)
- 《道路车辆 48V供电电压的电气及电子部件 电性能要求和试验方法》文本以及编制说明
- 2024年新高考I卷数学高考试卷(原卷+答案)
- 十八项医疗核心制度考试题与答案
- 2024年鄂尔多斯市国资产投资控股集团限公司招聘管理单位遴选500模拟题附带答案详解
- 篝火晚会流程
- 船形乌头提取工艺优化
评论
0/150
提交评论