返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++cmake实现日志类的示例代码
  • 126
分享到

C++cmake实现日志类的示例代码

C++cmake实现日志类C++cmake日志类C++日志类 2023-03-09 17:03:50 126人浏览 薄情痞子
摘要

Logger.h #pragma once #include <fstream> #include <sstream> #include <iOStr

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;
}

日志图片

本程序使用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日志类内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++cmake实现日志类的示例代码

本文链接: https://lsjlt.com/news/199112.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++cmake实现日志类的示例代码
    Logger.h #pragma once #include <fstream> #include <sstream> #include <iostr...
    99+
    2023-03-09
    C++ cmake实现日志类 C++ cmake日志类 C++ 日志类
  • 怎么使用C++ cmake实现日志类
    本文小编为大家详细介绍“怎么使用C++ cmake实现日志类”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用C++ cmake实现日志类”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。L...
    99+
    2023-07-05
  • C++日期类(Date)实现的示例代码
    目录类的定义确定某年某月有多少天构造函数打印日期日期+=天数日期+天数日期-=天数日期-天数前置++后置++后置–前置–>运算符重载==运算符重载>...
    99+
    2024-04-02
  • C++无痛实现日期类的示例代码
    目录日期类的实现构造函数析构函数拷贝构造函数打印函数获取天数函数运算符重载区赋值重载整体代码Date.hDate.cpp日期类的实现 凡是要写类必须要提到六大默认成员(六位大爷):构...
    99+
    2022-11-13
    C++实现日期类 C++日期类
  • C# log4net 日志输出的实现示例
    目录第一步:安装log4net第二步:添加log4net.config配置文件第三步:添加日志配置第四步:AssemblyInfo.cs中配置 Watch = true思路: 1.安...
    99+
    2024-04-02
  • C++实现比较日期大小的示例代码
    目录一、目的二、代码三、补充一、目的 用来比较两个日期。日期格式:2023-03-31 09:16:56。 二、代码 //std::wstring strA = L"2023-03-...
    99+
    2023-05-14
    C++比较日期大小 C++比较日期 C++ 日期
  • C++实现MyString的示例代码
    MyString的构造、析构、拷贝构造、赋值运算 class String { char* str; public: String(const char* p = NULL) :...
    99+
    2024-04-02
  • C++实现日期类的示例详解
    目录一、获取某年某月的天数二、Date的默认成员函数(全缺省的默认构造)三、运算符重载1.+ =、+、- =、-2.==、!=、>、>=、<、<=3.前置++...
    99+
    2023-02-07
    C++实现日期类 C++常见日期类 C++日期类
  • Go实现set类型的示例代码
    目录如何实现set构造一个Set如何实现set Go中是不提供Set类型的,Set是一个集合,其本质就是一个List,只是List里的元素不能重复。 Go提供了map类型,但是我们知...
    99+
    2023-01-31
    Go set类型 Go set
  • C++ 实现桶排序的示例代码
    目录原理实现步骤:模拟生成整数随机数桶排序实现完整版可运行程序时间复杂度计算桶排序:整数  原理 原理简述:按照需要排序数组的实际情况,生成一个一定长度的一维数组,用于统计...
    99+
    2024-04-02
  • c++实现堆排序的示例代码
    看了一下优先队列,查了一下堆排序。堆排序主要就是建最大堆(最小堆)和交换2个操作。如果建的是最大堆,那么交换的时候,父节点就和最大的子节点比较,如果它比最大的子节点还大,那就不用比了...
    99+
    2023-02-02
    c++ 堆排序
  • C#实现ComboBox变色的示例代码
    目录实践过程效果代码实践过程 效果 代码 public partial class B_ComboBox : ComboBox { public B_...
    99+
    2023-01-05
    C#实现ComboBox变色 C# ComboBox变色 C# ComboBox
  • C++实现Dijkstra算法的示例代码
    目录一、算法原理二、具体代码1.graph类2.PathFinder类3. main.cpp三、示例一、算法原理 链接: Dijkstra算法及其C++实现参考这篇文章 二、具体代码...
    99+
    2024-04-02
  • C++模拟实现vector的示例代码
    目录1.前言2.vector介绍3.vector模拟实现3.1 迭代器接口3.2 vector元素操作3. 3 构造与析构1.前言 大家在学习C++的时候一定会学到STL(标准模板库...
    99+
    2024-04-02
  • C语言实现栈的示例代码
    目录一、了解栈的结构特点二、具体实现补充 栈的用处一、了解栈的结构特点 栈是一种特殊的线性表,只允许从一端进出数据,称为后进先出,先进后出。 压栈:栈的插入操作叫做进栈/压...
    99+
    2024-04-02
  • Android实现日历控件示例代码
    做的是一个酒店的项目,可以选择入住和离开的日期。声明为了省事在网上找的资料,自己修改的逻辑,希望对需要的朋友有帮助。喜欢的给个好评。谢谢啦!祝生活愉快! 先上图 &nb...
    99+
    2022-06-06
    示例 Android
  • C/C++实现精灵游戏的示例代码
    目录前言创建win32项目游戏效果核心代码前言 采用面向过程的遍程思想,通过acllib图形库来实现。 acllib下载地址:acllib tom,jerry,dog,heart以及...
    99+
    2024-04-02
  • C/C++实现蛇形矩阵的示例代码
    目录题目描述题解部分完整代码菜鸡蒟蒻想在博客中记录一些算法学习的心得体会,会持续更新C/C++方面的题解,方便理清思路和日后复习。如果还能结识一起敲代码的小伙伴的话就更好啦嘿嘿,因为...
    99+
    2024-04-02
  • C++ 实现一个复数类的实例代码
    要求 实现⼀个复数类 Complex 。 Complex 类包括两个 double 类型的成员 real 和 image ,分别表示复数的实部和虚部。 对 Comple...
    99+
    2024-04-02
  • Vue实现移动端日历的示例代码
    工作中遇到一个需求是根据日历查看某一天/某一周/某一月的睡眠报告,但是找了好多日历组件都不是很符合需求,只好自己手写一个日历组件,顺便记录一下。 先看看UI给的设计图和,需求是有数据...
    99+
    2023-05-14
    Vue实现移动端日历 Vue实现日历 Vue日历
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作