首页 > 编程 > C++ > 正文

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

2020-01-26 13:29:32
字体:
来源:转载
供稿:网友

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表