c++有好多日志类库,今天在网上学习了一个简单的日志类库的写法。

直接看代码 :

Log.h文件:

#ifndef LOG_H
#define LOG_H  #include <fstream>
#include <string>
#include <sstream>
#include <ctime>  using namespace std;/**
* 用于输出log文件的类.
*/
class Log
{
public:Log();~Log();bool Open(string strFileName);void Close();bool CommonLogInit(string name); //打开默认的log 文件  void Enable();void Disable();string GetTimeStr();template <typename T> void LogOut(const T& value){if (m_bEnabled){m_tOLogFile << value;}}template <typename T> void LogOutLn(const T& value){if (m_bEnabled){m_tOLogFile << value << endl;}}void LogOutLn(){if (m_bEnabled){m_tOLogFile << endl;}}template <typename T> Log& operator<<(const T& value){if (m_bEnabled){m_tOLogFile << value;}return (*this);}Log& operator<<(ostream& (*_Pfn)(ostream&)){if (m_bEnabled){(*_Pfn)(m_tOLogFile);}return (*this);}private:template<typename T> string ValueToStr(T value){ostringstream ost;ost << value;return ost.str();}
private:ofstream m_tOLogFile;bool m_bEnabled;
};#endif  

Log.cpp文件:

#include "Log.h"  Log::Log():m_bEnabled(true)
{
}Log::~Log()
{
}bool Log::Open(string sFileName)
{m_tOLogFile.open(sFileName.c_str(), ios_base::out | ios_base::app);if (!m_tOLogFile){return false;}return true;
}void Log::Close()
{if (m_tOLogFile.is_open()){m_tOLogFile.close();}
}bool Log::CommonLogInit(string name)
{time_t tNowTime;time(&tNowTime);tm* tLocalTime = localtime(&tNowTime);//得到日期的字符串  string sDateStr = ValueToStr(tLocalTime->tm_year + 1900) + "-" +ValueToStr(tLocalTime->tm_mon + 1) + "-" +ValueToStr(tLocalTime->tm_mday);return Open( "Log\\"+name + sDateStr + ".txt");
}void Log::Enable()
{m_bEnabled = true;
}void Log::Disable()
{m_bEnabled = false;
}//得到当前时间的字符串
string Log::GetTimeStr()
{time_t tNowTime;time(&tNowTime);tm* tLocalTime = localtime(&tNowTime);//"2011-07-18 23:03:01 ";  string strFormat = "%Y-%m-%d %H:%M:%S ";char strDateTime[30] = { '\0' };strftime(strDateTime, 30, strFormat.c_str(), tLocalTime);string strRes = strDateTime;return strRes;
}

使用实例main.cpp

#include "Log.h"  int main()
{Log mainLog;string a = "log";mainLog.CommonLogInit(a);mainLog << mainLog.GetTimeStr() << "这里是需要自己输入的信息" << endl;
}

C++ 一个简单的log类的实现相关推荐

  1. python简单代码演示效果-演示python如何创建和使用一个简单的元类的代码

    在做工程闲暇时间,将做工程过程比较重要的一些内容备份一下,如下内容段是关于演示python如何创建和使用一个简单的元类的内容,应该能对小伙伴们也有用途. #!/usr/bin/env python # ...

  2. boost::mpi模块实现一个简单的点类,我们可以构建、添加、比较和 连载

    boost::mpi模块实现一个简单的点类,我们可以构建.添加.比较和 连载 实现功能 C++实现代码 实现功能 (boost::mpi模块实现一个简单的点类,我们可以构建.添加.比较和 连载 C++ ...

  3. python自己做个定时器_技术图文:如何利用 Python 做一个简单的定时器类?

    原标题:技术图文:如何利用 Python 做一个简单的定时器类? 背景 今天在B站上看有关 Python 最火的一个教学视频 -- "零基础入门学习 Python",这也是我们 P ...

  4. 在Kubernetes上部署一个简单的、类PaaS的平台,原来这么容易!

    作者 | Bram Dingelstad 译者 | 弯月 责编 |徐威龙 封图| CSDN下载于视觉中国 我们都遇到过这种情况:有人发现了一个bug,然而这不是一般的软件bug,甚至都不是通常意义上的 ...

  5. C++ 一个简单的基类

    继承 可在已有类的基础上添加功能 可给类添加数据 可修改类方法的行为 从一个类派生出另一个类时,原始类称为基类,继承类成为派生类 Webtown俱乐部决定跟踪乒乓球会员,设计一个简单的TableTen ...

  6. 实验3.2 定义一个简单的Computer类

    题目 定义一个简单的Computer类,有数据成员芯片(cpu).内存(ram).光驱(cdrom)等等,有两个公有成员函数run.stop.cpu为CPU类的一个对象,ram为RAM类的一个对象,c ...

  7. uniapp APP 端 WebSocket 使用,实现一个简单 WebSocket 工具类

    背景 最近有需求要做一个简单业务的 APP 应用,简单考虑选用 uniapp + uview + vue2.x 方案,因为还有web端页面也需要用到 WebSocket ,简单封装了一个适应 web ...

  8. 技术图文:如何利用 Python 做一个简单的定时器类?

    背景 今天在B站上看有关 Python 最火的一个教学视频,零基础入门学习 Python,这也是我们 Python基础刻意练习活动 的推荐视频教程. 在学习魔法方法的时候,有一节视频是制作一个简单的定 ...

  9. php-curl-class,一个简单PHP CURL类

    这里要说明一下...这个类的形成是参考了晚上前辈们的代码加上我自己的理解见解而集成的...前辈们的代码出处已经忘记了 我在这里感谢这些前辈们给我的启发...希望这个类能给大家带来帮助...如果有不足的 ...

  10. [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)...

    首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code  1 2   template < class _Ty, cla ...

最新文章

  1. 100亿数据1万属性数据架构设计
  2. 为什么不用简书写文章
  3. 测试流程图_配方分析 测试说明及流程图详解
  4. 公开征集 | 每个人都可以成为 COSCon'21 主论坛的开源明星
  5. JQ ajax解决跨域
  6. [源码]java.lang.reflect.Proxy
  7. android studio 多个项目管理,Android Studio之同一应用创建多个Activity(一)
  8. Python数据科学平台Anaconda的最新发布中增加了Microsoft VS Code
  9. python拷贝list
  10. 网页动态背景:随鼠标线条变动
  11. Modbus协议介绍与仿真器Modbus Poll、Modbus Slave、Mod_Rssim 使用指南
  12. xshell连接不上虚拟机Linux
  13. Pytorch-gpu版安装教程【注意:无需提前安装cuda和cudnn】
  14. html鼠标放上虚化背景图片,如何将网页CSS背景图高斯模糊且全屏显示
  15. 波段操作是什么 波段操作技巧
  16. 什么是性能测试?性能测试目的?性能测试的主要分类以及性能测试的常用指标?
  17. Maven3.5.3下载安装与环境配置
  18. C语言揭秘:01 准备工作
  19. pip安装pytorch慢
  20. Windows cmd 命令行清空

热门文章

  1. a人工智能b大数据c云计算_解读云计算、大数据、AI 对数据中心的影响,最全面的解说分析!...
  2. python xpath 中文乱码_Python爬虫实战 批量下载高清美女图片!让你们开开眼!
  3. springboot图片上传和显示_Jeewx-Boot 1.1 版本发布,基于SpringBoot的开源微信管家系统...
  4. python刻度增加1个数_Matplotlib添加一个特定的勾号,表示轴的最大多个刻度单次观察...
  5. vue 多层双层全选_vue多级复杂列表展开/折叠,全选/分组全选实现
  6. antd vue 的table添加背景颜色_「教程」Spire.PDF教程:如何给PDF添加背景颜色和平铺背景图...
  7. JAVA基础(2/17)-基本语法_数据类型
  8. 运行JAR文件显示没有主清单属性
  9. poj 1125 Floyd简单
  10. Spring Cloud (6)config 客户端配置 与GitHub通信