文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-07-05 10:40

关注

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

Logger.h

#pragma once#include <fstream>#include <sstream>#include <iostream>#include <string>#define NAME_SPACE_START(name) namespace name {#define NAME_SPACE_END }#ifndef _LOGGER_#define _LOGGER_NAME_SPACE_START(Log)class Logger{public:    Logger() = delete;    Logger(const Logger&) = delete;    Logger(std::string logFilePath = "", std::string logFileName = "");    ~Logger() = default;    void LogStart(std::string context);    void LogEnd(std::string context);    void Debug(std::string context);    void Error(std::string context);    void Warning(std::string context);    void Info(std::string context);    bool OpenFile(std::string absolutePath);    bool CloseFile();    std::stringstream GetCurrentTime();public:    static std::string m_logFilePath;    static std::string m_title;private:    std::ofstream _file;    std::string absPath;};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::string basePath = "C:\\";  //日志路径std::string baseTitle = "logger.txt"; //日志文件名NAME_SPACE_START(Log)std::string Logger::m_logFilePath = basePath;std::string Logger::m_title = baseTitle;Logger::Logger(std::string logFilePath, std::string logFileName){    std::string absolutePath = "";    if(logFilePath != ""){        absolutePath += logFilePath;    }    else{        absolutePath += Logger::m_logFilePath;    }    if(logFileName != ""){        absolutePath += logFileName;    }    else{        absolutePath += Logger::m_title;    }    this->absPath = absolutePath;}void Logger::LogStart(std::string context = ""){    if(!this->OpenFile(this->absPath)) return;    std::stringstream ss=GetCurrentTime();    _file<<ss.str()         <<"------------------------------Log Start"         <<" "<<context<<" "         <<"------------------------------"<<std::endl;    this->CloseFile();}void Logger::LogEnd(std::string context = ""){    if(!this->OpenFile(this->absPath)) return;    std::stringstream ss=GetCurrentTime();    _file<<ss.str()         <<"------------------------------Log End"         <<" "<<context<<" "         <<"------------------------------"<<std::endl;    this->CloseFile();}void Logger::Debug(std::string context = ""){    if(!this->OpenFile(this->absPath)) return;    std::stringstream ss=GetCurrentTime();    _file<<ss.str()         <<"[Log Debug]:"         <<context<<std::endl;    this->CloseFile();}void Logger::Error(std::string context = ""){    if(!this->OpenFile(this->absPath)) return;    std::stringstream ss=GetCurrentTime();    _file<<ss.str()         <<"[Log Error]:"         <<context<<std::endl;    this->CloseFile();}void Logger::Warning(std::string context = ""){    if(!this->OpenFile(this->absPath)) return;    std::stringstream ss=GetCurrentTime();    _file<<ss.str()         <<"[Log Warning]:"         <<context<<std::endl;    this->CloseFile();}void Logger::Info(std::string context = ""){    if(!this->OpenFile(this->absPath)) return;    std::stringstream ss=GetCurrentTime();    _file<<ss.str()         <<"[Log Info]:"         <<context<<std::endl;    this->CloseFile();}bool Logger::OpenFile(std::string absolutePath){    try {        this->_file.open(absolutePath, std::ios::out | std::ios::app);        if(!_file.is_open()){            return false;        }        return true;    } catch (std::exception ex) {        return false;    }}bool Logger::CloseFile(){    try{        this->_file.close();        return true;    }    catch(std::exception ex){        return false;    }}std::stringstream Logger::GetCurrentTime(){    std::stringstream ss;    time_t now=time(nullptr);    tm curr_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      <<" ";    return ss;}NAME_SPACE_END

main.cpp

#include <iostream>#include "logger.h"using namespace std;using namespace Log;int main(){    Logger log("F:/Visual-Studio-practice/vscode/mySource/");    log.LogStart("main");    log.Debug("main");    log.Warning("main");    log.Error("main");    log.Info("main");    log.LogEnd("main");    return 0;}

日志图片

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

本程序使用cmake生成

cmake文件

cmake_minimum_required(VERSION 3.0.0)
project(logger CXX)
set(CMAKE_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实现日志类

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯