怎么使用C++ cmake实现日志类

免费教程   2024年05月10日 6:29  

本文小编为大家详细介绍“怎么使用C++cmake实现日志类”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用C++cmake实现日志类”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

Logger.h

#pragmaonce#include<fstream>#include<sstream>#include<iostream>#include<string>#defineNAME_SPACE_START(name)namespacename{#defineNAME_SPACE_END}#ifndef_LOGGER_#define_LOGGER_NAME_SPACE_START(Log)classLogger{public:Logger()=delete;Logger(constLogger&)=delete;Logger(std::stringlogFilePath="",std::stringlogFileName="");~Logger()=default;voidLogStart(std::stringcontext);voidLogEnd(std::stringcontext);voidDebug(std::stringcontext);voidError(std::stringcontext);voidWarning(std::stringcontext);voidInfo(std::stringcontext);boolOpenFile(std::stringabsolutePath);boolCloseFile();std::stringstreamGetCurrentTime();public:staticstd::stringm_logFilePath;staticstd::stringm_title;private:std::ofstream_file;std::stringabsPath;};NAME_SPACE_END#endif//!_LOGGER_

Logger.cpp

#include"logger.h"#include<ctime>#include<exception>#include<fstream>#include<ios>#include<iterator>#include<ostream>#include<sstream>#include<streambuf>#include<string>#include<time.h>std::stringbasePath="C:\\";//日志路径std::stringbaseTitle="logger.txt";//日志文件名NAME_SPACE_START(Log)std::stringLogger::m_logFilePath=basePath;std::stringLogger::m_title=baseTitle;Logger::Logger(std::stringlogFilePath,std::stringlogFileName){std::stringabsolutePath="";if(logFilePath!=""){absolutePath+=logFilePath;}else{absolutePath+=Logger::m_logFilePath;}if(logFileName!=""){absolutePath+=logFileName;}else{absolutePath+=Logger::m_title;}this->absPath=absolutePath;}voidLogger::LogStart(std::stringcontext=""){if(!this->OpenFile(this->absPath))return;std::stringstreamss=GetCurrentTime();_file<<ss.str()<<"------------------------------LogStart"<<""<<context<<""<<"------------------------------"<<std::endl;this->CloseFile();}voidLogger::LogEnd(std::stringcontext=""){if(!this->OpenFile(this->absPath))return;std::stringstreamss=GetCurrentTime();_file<<ss.str()<<"------------------------------LogEnd"<<""<<context<<""<<"------------------------------"<<std::endl;this->CloseFile();}voidLogger::Debug(std::stringcontext=""){if(!this->OpenFile(this->absPath))return;std::stringstreamss=GetCurrentTime();_file<<ss.str()<<"[LogDebug]:"<<context<<std::endl;this->CloseFile();}voidLogger::Error(std::stringcontext=""){if(!this->OpenFile(this->absPath))return;std::stringstreamss=GetCurrentTime();_file<<ss.str()<<"[LogError]:"<<context<<std::endl;this->CloseFile();}voidLogger::Warning(std::stringcontext=""){if(!this->OpenFile(this->absPath))return;std::stringstreamss=GetCurrentTime();_file<<ss.str()<<"[LogWarning]:"<<context<<std::endl;this->CloseFile();}voidLogger::Info(std::stringcontext=""){if(!this->OpenFile(this->absPath))return;std::stringstreamss=GetCurrentTime();_file<<ss.str()<<"[LogInfo]:"<<context<<std::endl;this->CloseFile();}boolLogger::OpenFile(std::stringabsolutePath){try{this->_file.open(absolutePath,std::ios::out|std::ios::app);if(!_file.is_open()){returnfalse;}returntrue;}catch(std::exceptionex){returnfalse;}}boolLogger::CloseFile(){try{this->_file.close();returntrue;}catch(std::exceptionex){returnfalse;}}std::stringstreamLogger::GetCurrentTime(){std::stringstreamss;time_tnow=time(nullptr);tmcurr_tm;localtime_s(&curr_tm,&now);ss<<curr_tm.tm_year<<"-"<<curr_tm.tm_mon<<"-"<<curr_tm.tm_yday<<""<<curr_tm.tm_hour<<":"<<curr_tm.tm_min<<":"<<curr_tm.tm_sec<<"";returnss;}NAME_SPACE_END

main.cpp

#include<iostream>#include"logger.h"usingnamespacestd;usingnamespaceLog;intmain(){Loggerlog("F:/Visual-Studio-practice/vscode/mySource/");log.LogStart("main");log.Debug("main");log.Warning("main");log.Error("main");log.Info("main");log.LogEnd("main");return0;}

日志图片

本程序使用cmake生成

cmake文件

_minimum_required(VERSION 3.0.0)project(logger CXX)set(_INSTALL_PREFIX "F:/Visual-Studio-practice/vscode/mySource/build")file(GLOB SOURCE_FILE ./src/logger.cpp)add_library(logger_static STATIC ${SOURCE_FILE})target_include_directories(logger_static PUBLIC header)

最外层cmake

cmake_minimum_required(VERSION 3.0.0)project(MAIN VERSION 0.1.0)set(CMAKE_BUILD_TYPE Debug)set(UTILS_PATH ${PROJECT_SOURCE_DIR}/utils)add_subdirectory(utils/Log)add_executable(MAIN main.cpp)include_directories(${UTILS_PATH}/Log/header)target_link_libraries(MAIN logger_static)enable_testing()add_test(NAME MAIN_TEST COMMAND MAIN)

目录结构如下

读到这里,这篇“怎么使用C++cmake实现日志类”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

域名注册
购买VPS主机

您或许对下面这些文章有兴趣:                    本月吐槽辛苦排行榜

看贴要回贴有N种理由!看帖不回贴的后果你懂得的!


评论内容 (*必填):
(Ctrl + Enter提交)   

部落快速搜索栏

各类专题梳理

网站导航栏

X
返回顶部