C++ Log日志类轻量级支持格式化输出变量实现代码

 更新时间:2019年04月07日 21:28:13   投稿:mdxy-dxy  
这篇文章主要介绍了C++ Log日志类轻量级支持格式化输出变量实现代码,需要的朋友可以参考下

CLog 头 代码很简单 如果需要的直接Ctrl+C ----Ctrl+V 即可

#ifndef __CLOG__
#define __CLOG__
#include <windows.h>
#include <string>
#include <fstream>
#include <tchar.h>
#include <ctime>
class CLog
{
public:
  CLog();
  CLog(const std::string LogFile);
  ~CLog();
  template <class T>
  static void WriteLog(T x);
  //支持格式化输出多参数输出
  static void WriteLogFormat(const char* format, ...);
private:
  static std::string GetFilePath();
  std::string m_LogFilePath;
  static std::string GetSystemTimes();
  static bool IsPathExist(const std::string FilePath);
};
//支持输出int double 文本 
template <class T> void CLog::WriteLog(T x)
{
  std::fstream of(GetFilePath(), std::ios::app);
  if (!of.is_open())return;
  of.seekp(std::ios::end);  //设置文件指针到文件尾部
  of << GetSystemTimes() <<_T("line: ")<<__LINE__<<_T(" value: ")<< x << std::endl;
  of.close();  //关闭文件;
}
#endif

CLog.cpp

#include "Log.h"
CLog::CLog()
  :m_LogFilePath("")
{
  m_LogFilePath = GetFilePath();
  if (IsPathExist(m_LogFilePath))
    DeleteFile(m_LogFilePath.c_str());

}

CLog::CLog(const std::string LogFile)
  :m_LogFilePath(LogFile)
{
  if (IsPathExist(m_LogFilePath))
    DeleteFile(m_LogFilePath.c_str());
}

CLog::~CLog()
{
}

void CLog::WriteLogFormat(const char* format, ...)
{
  va_list arglist;
  std::string strArgData;
  char szBuffer[0x1024];
  ZeroMemory(szBuffer, 0x1024);
  va_start(arglist, format);
  vsprintf_s(szBuffer, format, arglist);
  va_end(arglist);
  strArgData = szBuffer;
  std::fstream of(GetFilePath(), std::ios::app);
  if (!of.is_open())return;
  of << GetSystemTimes() << " Line: " << __LINE__ << " Value: " << strArgData << std::endl;
  of.close();
}

std::string CLog::GetFilePath()
{
  std::string FlieTmp;
  TCHAR szPath[MAX_PATH];
  ::ZeroMemory(szPath, MAX_PATH);
  if (!::GetCurrentDirectory(MAX_PATH, szPath))return FlieTmp;
  FlieTmp = szPath;
  FlieTmp += _T("\\log.txt");
  return FlieTmp;
}

std::string CLog::GetSystemTimes()
{
  time_t Time;
  CHAR strTime[MAX_PATH];
  ZeroMemory(strTime, MAX_PATH);
  time(&Time);
  tm t;
  localtime_s(&t, &Time);
  strftime(strTime, 100, _T("%Y-%m-%d %H:%M:%S "), &t);
  std::string strTimes = strTime;
  return strTimes;
}

bool CLog::IsPathExist(const std::string FilePath)
{
  DWORD dwAttribute = ::GetFileAttributes(FilePath.c_str());
  return dwAttribute != INVALID_FILE_ATTRIBUTES;
}

好了这篇文章就介绍到这了,需要的朋友可以的参考一下。

相关文章

  • 使用c++实现OpenCV绘制旋转矩形图形

    使用c++实现OpenCV绘制旋转矩形图形

    这篇文章主要给大家介绍了使用c++实现OpenCV绘制图形旋转矩形的方法案例,通过图文及代码形式进行了详细的描述,有需要的朋友可以参考下,希望可以有所帮助
    2021-08-08
  • C++实现LeetCode(7.翻转整数)

    C++实现LeetCode(7.翻转整数)

    这篇文章主要介绍了C++实现LeetCode(7.翻转整数),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 嵌入式QT移植的实现

    嵌入式QT移植的实现

    本文主要介绍了嵌入式QT移植的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • C++获取特定进程CPU使用率的实现代码

    C++获取特定进程CPU使用率的实现代码

    写一个小程序在后台记录每个进程的CPU使用情况,揪出锁屏后占用CPU的进程,于是自己写了一个C++类CPUusage,方便地监视不同进程的CPU占用情况。本人编程还只是个新手,如有问题请多多指教
    2019-04-04
  • 给喜欢的人用C语言写烟花

    给喜欢的人用C语言写烟花

    你向窗外看烟火,我在窗边看你,这时,你比烟花好看的多,你的眼眸倒映满天的烟火,我的瞳孔倒影你闪光的眼色,这时,我比烟花寂寞
    2021-11-11
  • 详解如何在C/C++中测量一个函数或功能的运行时间

    详解如何在C/C++中测量一个函数或功能的运行时间

    本文算是一个比较完整的关于在 C/C++ 中测量一个函数或者功能的总结,最后会演示三种方法的对比,文章通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • C语言新手入门之格式化输出和变量类型

    C语言新手入门之格式化输出和变量类型

    这篇文章主要给大家介绍了关于C语言中格式化输出和变量类型的相关资料,文中的教程非常适合新手零基础的朋友们参考学习,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • 使用C语言判断英文字符大小写的方法

    使用C语言判断英文字符大小写的方法

    这篇文章主要介绍了使用C语言判断英文字符大小写的方法,分别为isupper()函数和islower()函数的使用,需要的朋友可以参考下
    2015-08-08
  • vscode编译运行c语言报错乱码的解决

    vscode编译运行c语言报错乱码的解决

    本文主要介绍了vscode编译运行c语言报错乱码,文中通过图文介绍的的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • C++软件添加dump调试打印日志(推荐)

    C++软件添加dump调试打印日志(推荐)

    下面小编就为大家带来一篇C++软件添加dump调试打印日志(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07

最新评论