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

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

前置要求

  • 安装cmake工具:在官网 https://cmake.org/download/ 下载对应系统的版本进行安装
  • C++编译器:这里以g++为例
  • IDE:这里以Visual Studio Code为例

步骤一:创建工程

利用cmake工具创建一个C++工程。

  1. 在项目根目录创建文件CMakeLists.txt,内容如下
cmake_minimum_required(VERSION 3.0)
project(MyLog)

include_directories(include)

aux_source_directory(src DIR_SRCS)

add_executable(MyLog ${DIR_SRCS})
  1. 在根目录下创建include和src目录,并分别放入头文件和源文件

步骤二:实现日志类

在include目录下创建Log.h文件,代码如下

#ifndef LOG_H
#define LOG_H

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <stdarg.h>
#include <string>
#include <chrono>

enum LogLevel{LOG_DEBUG, LOG_INFO, LOG_WARN, LOG_ERROR};

class Log
{
public:
    static Log* GetInstance();

    void LogMessage(LogLevel level, const char* format, ...);
    void SetLogLevel(LogLevel level);

private:
    LogLevel m_logLevel;
    std::ofstream m_output;

    Log();
    virtual ~Log();
    Log(const Log&) = delete;
    Log& operator=(const Log&) = delete;
};

#endif // LOG_H

在src目录下创建Log.cpp文件,代码如下

#include "Log.h"

Log::Log()
{
    m_logLevel = LogLevel::LOG_INFO;
    m_output = std::ofstream("log.txt", std::ios_base::app);
}

Log::~Log()
{
    m_output.close();
}

Log* Log::GetInstance()
{
    static Log log;
    return &log;
}

void Log::LogMessage(LogLevel level, const char* format, ...)
{
    if (level >= m_logLevel)
    {
        auto now = std::chrono::system_clock::now();
        auto now_time_t = std::chrono::system_clock::to_time_t(now);
        auto now_tm = std::localtime(&now_time_t);
        char buffer[80];
        std::strftime(buffer, sizeof(buffer), "[%Y-%m-%d %H:%M:%S]", now_tm);
        m_output << buffer;

        va_list args;
        va_start(args, format);
        char message[1024];
        vsprintf(message, format, args);
        va_end(args);

        m_output << " [" << level << "] " << message << std::endl;
    }
}

void Log::SetLogLevel(LogLevel level)
{
    m_logLevel = level;
}

步骤三:使用日志类

在main.cpp中使用Log类进行日志输出,代码如下:

#include "Log.h"

int main()
{
    auto log = Log::GetInstance();
    log->SetLogLevel(LOG_INFO);
    log->LogMessage(LOG_INFO, "This is an info message. \n");
    log->LogMessage(LOG_WARN, "This is a warning message. \n");
    log->LogMessage(LOG_DEBUG, "This is a debug message. \n");
    log->LogMessage(LOG_ERROR, "This is an error message. \n");

    return 0;
}

示例一

我们将日志级别设为LOG_INFO,执行main函数,可以看到log.txt文件中只有info信息输出。

示例二

我们将日志级别设为LOG_WARN,执行main函数,可以看到log.txt文件中有info和warn信息输出。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ cmake实现日志类的示例代码 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++实现中值滤波的示例代码

    下面我将为您详细讲解C++实现中值滤波的示例代码的完整攻略。 什么是中值滤波? 中值滤波是一种基本的数字图像处理方法,它是一种非线性滤波器,可以消除图像中的噪声,保持边缘细节。中值滤波的原理是对滤波器窗口中的像素点进行排序,然后取中间的数值作为滤波结果。通常情况下,中值滤波器的窗口大小是一个奇数,如3×3、5×5等等。 C++中值滤波示例代码 在C++中实现…

    C 2023年5月23日
    00
  • 史上最贴心的 VS code C++ 环境配置超详细教程

    史上最贴心的 VS code C++ 环境配置超详细教程 1. 环境说明 本教程为在 Windows 10 操作系统下使用 VS code 编辑器配置 C++ 开发环境的详细教程。在配置过程中,我们使用 MinGW C++ 编译器和 CMake 构建工具。 2. 环境准备 安装 MinGW 编译器 访问 MinGW 官网,下载最新的 mingw-get-se…

    C 2023年5月23日
    00
  • 关于C++的重载运算符和重载函数

    关于C++的重载运算符和重载函数 什么是重载运算符和重载函数 在C++中,重载指的是在一个类中定义多个同名但是参数列表不同的成员函数或全局函数。当编译器遇到这些同名的函数时,会根据传入的参数类型和数量来确定具体要调用哪个函数,从而实现了多态性。 重载运算符指的是对C++中一个或多个运算符进行重新定义,让该运算符能够在自定义类型上进行操作。例如,我们可以通过重…

    C 2023年5月23日
    00
  • MathWorks MATLAB R2022a中文版激活密钥+详细安装教程(含下载)

    下面我为你详细讲解“MathWorks MATLAB R2022a中文版激活密钥+详细安装教程(含下载) ”的完整攻略。 下载MATLAB R2022a 首先,你需要进入官网下载MATLAB R2022a的安装文件。在下载页面选择“试用版”,然后选择相应的操作系统,下载完成后解压。 安装MATLAB R2022a 点击解压出来的“setup.exe”文件,选…

    C 2023年5月22日
    00
  • 如何实现循环队列

    如何实现循环队列? 循环队列是一种环形数据结构,它与普通队列的不同之处在于,当队列满时,新元素会插入到队列头部,而不是队列尾部。循环队列的实现可以使用数组或链表来完成。 以下是使用数组实现循环队列的攻略: 为了实现循环队列,我们需要先声明一个数组来存储队列元素,还需要确定两个指针front和rear,分别指向队列的头部和尾部。 初始化队列时,将front和r…

    C 2023年5月23日
    00
  • C 错误处理

    当我们编写 C 语言程序时,难免会遇到错误。C中的错误可以说在程序中随时出现。 在这种情况下,我们需要一些工具来检查和处理这些错误,从而使程序更加健壮和稳定。 因此,C 语言为程序员提供了一些内置的错误处理机制。 错误处理函数 C语言中有一些错误处理函数,这些函数可以检测并报告代码中的错误。它们通常在程序发生错误时调用。以下是一些常用的错误处理函数: per…

    C 2023年5月10日
    00
  • Windows10下通过MinGW-x64搭建c/c++环境配置和使用方法

    下面是详细讲解“Windows10下通过MinGW-x64搭建c/c++环境配置和使用方法”的完整攻略。 1. 下载MinGW-x64 首先,我们需要下载MinGW-x64的安装包。在官网上(https://osdn.net/projects/mingw/releases/)选择你需要的版本进行下载。 2. 安装MinGW-x64 下载完成后,我们需要安装M…

    C 2023年5月23日
    00
  • C语言中数据如何存储进内存揭秘

    C语言中数据如何存储进内存揭秘 C语言程序在运行时,需要使用计算机的内存来存储数据。C语言中的数据类型包括整型、浮点型、字符型等等,这些数据类型都有不同的内存分配方式,下面我们就来一一了解。 整型数据内存分配 对于整型数据,C语言会根据数据类型的位数分配不同字节的内存空间。例如,对于int类型的数据,一般分配4个字节的内存空间。这个内存空间会从计算机的内存地…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部