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, , _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++简单实现Log日志类轻量级支持格式化输出变量的更多相关文章
- 模块(二)——简单的log日志
简单的log日志 鉴于任何功能模块或系统在调试时都需要日志打印,这里随便写了一下,作为以后代码调试之用,只实现了不同等级的日志输出功能,其他的调试功能以后再行添加:使用方法简单,只需要在头文件里事先按 ...
- 简单实用的日志类CLog (Python版)
#coding: utf-8 import time ''' /***************************************************************** Fu ...
- 20181015记录一个简单的TXT日志类
20190422添加换行以及时间记录 using System; using System.Collections.Generic; using System.IO; using System.Lin ...
- python+selenium之自定义封装一个简单的Log类
python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ...
- Python之自定义封装一个简单的Log类
参考:http://www.jb51.net/article/42626.htm 参考:http://blog.csdn.net/u011541946/article/details/70198676 ...
- 【个人使用.Net类库】(2)Log日志记录类
开发接口程序时,要保证程序稳定运行就要时刻监控接口程序发送和接收的数据,这就需要一个日志记录的类将需要的信息记录在日志文件中,便于自己维护接口程序.(Web系统也是如此,只是对应的日志实现比这个要复杂 ...
- 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)
并发编程概述 前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...
- 2.NetDh框架之简单高效的日志操作类(附源码和示例代码)
前言 NetDh框架适用于C/S.B/S的服务端框架,可用于项目开发和学习.目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型.多库实例,简单强大: 此部分具体说明可参考博客: ...
- VC++ 一个简单的Log类
在软件开发中,为程序建立Log日志是很必要的,它可以记录程序运行的状态以及出错信息,方便维护和调试. 下面实现了一个简单的Log类,使用非常简单,仅供参考. // CLogHelper.h : hea ...
随机推荐
- Redis源码解析:08对象
前面介绍了Redis用到的所有主要数据结构,比如简单动态字符串(SDS).双端链表.字典.压缩列表.整数集合等.然而Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一 ...
- jQuery Callback
Callback 函数在当前动画 100% 完成之后执行. jQuery 动画的问题 许多 jQuery 函数涉及动画.这些函数也许会将 speed 或 duration 作为可选参数. 例子:$(& ...
- 删除username的索引
-- 删除index_name 索引 drop index index_name on user; show index from user \G; -- 创建新索引列组成,index_pinyin为 ...
- PyTorch代码调试利器: 自动print每行代码的Tensor信息
本文介绍一个用于 PyTorch 代码的实用工具 TorchSnooper.作者是TorchSnooper的作者,也是PyTorch开发者之一. GitHub 项目地址: https://github ...
- 检查进程启动情况,开始时间、启动时间、启动进程数、进程数是否正确、PID
#!/bin/sh bin=$(cd ``;pwd) cd ${bin} ### 定义检查函数 chk(){ programName=$ correctNum=$ programSubName=$ # ...
- es6新增语法之`${}`
这是es6中新增的字符串方法 可以配合反单引号完成拼接字符串的功能 1.反单引号怎么打出来?将输入法调整为英文输入法,单击键盘上数字键1左边的按键. 2.用法step1: 定义需要拼接进去的字符串变量 ...
- hdu 5734 Acperience(2016多校第二场)
Acperience Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- hdu 3805 Triangle Conjecture
Problem - 3805 题意是给出边的长度的,求出边长相等的三角形,输出任意一种答案.边长是1~n的数,每个只能用一次. 其实比较容易可以看出,无论我们怎么操作,只要保持边长总和都是相邻整数就是 ...
- Install Openjdk11 to Ubuntu 18.04 LTS
Ubuntu 18.04 LTS系统上通过sudo apt install openjdk-11-*命令安装的jdk11版本依然是jdk10,怎么样才能安装openjdk 11呢,今天,我们就来完 ...
- vbox ubuntu虚拟机中加载笔记本内置摄像头
使用C:\Program Files\Oracle\VirtualBox\VBoxManage.exe工具加载摄像头 1,显示可用摄像头 C:\Program Files\Oracle\Virtual ...