转载地址:http://blog.csdn.net/huangyifei_1111/article/details/52134914

NetDataLog.h

  1. #ifndef NETDATALOG_H
  2. #define NETDATALOG_H
  3. #include <iostream>
  4. #include <fstream>
  5. #include <stdio.h>
  6. #include <direct.h>
  7. #include <string>
  8. #include <io.h>
  9. #include <stdlib.h>
  10. #include <time.h>
  11. #include <fcntl.h>
  12.  
  13. using namespace std;
  14. enum TIMEFORMAT
  15. {
  16. NETLOG = , // [yyyy\mm\dd hh.MM.ss]
  17. LOGINLOG=, // mm-dd hh:MM:ss
  18. };
  19.  
  20. class NetDataLog
  21. {
  22. public:
  23. NetDataLog(string strDir = "log",string filename = "record",int maxfilesize=,int filecount=,int timeformat=);
  24. ~NetDataLog();
  25.  
  26. void addLog(string log); //添加日志记录到日志文件
  27. void fileSizeLimit(); //判断文件大小是否达到限定值
  28. int getCurrentLogFileSize();//获取当前日志文件的大小
  29. string getLogFileName(); //获取日志文件名称
  30. void setMaxFileSize(int);//设置文件最大大小
  31. void setFileName(string); //设置日志文件名
  32. void setFileCount(int); //设置日志文件的个数
  33. void setLogDir(string strDir); //设置日志文件目录
  34. private:
  35. void fileOffset(); //文件名称进行偏移
  36. bool checkFolderExist(const string &strPath);
  37. string getCurrentTime();
  38.  
  39. private:
  40. string m_LogFileName; //文件名
  41. int m_MaxFileSize; //文件大小
  42. int m_FileCount; //文件个数
  43. fstream *m_outputFile; //输出文件流
  44. string m_strDir; //目录
  45. int m_timeFormat;
  46.  
  47. };
  48. #endif

NetDataLog.cpp

  1. #include "stdafx.h"
  2. #include "NetDataLog.h"
  3. NetDataLog::NetDataLog(string strDir,string filename,int maxsize,int filecount,int timeFormat)
  4. {
  5. m_strDir = strDir;
  6. m_LogFileName = m_strDir+string("\\")+filename;
  7. m_MaxFileSize = maxsize;
  8. m_FileCount = filecount;
  9. m_timeFormat = timeFormat;
  10.  
  11. //判断日志目录是否存在
  12. if(!checkFolderExist(m_strDir.c_str()))
  13. {
  14. _mkdir(m_strDir.c_str());
  15. }
  16. m_outputFile = new fstream;
  17. string strname = m_LogFileName+".txt";
  18. m_outputFile->open(strname.c_str(),ofstream::out|ofstream::app); //打开日志文件
  19. bool b=m_outputFile->is_open();
  20.  
  21. }
  22. NetDataLog::~NetDataLog()
  23. {
  24. if(m_outputFile)
  25. delete m_outputFile;
  26. }
  27. //********************************
  28. //函数名:NetDataLog::checkFolderExist
  29. //描 述:测试目录是否存在
  30. //参 数:strPath 目录名
  31. //返回值:存在返回真
  32. //*************************************
  33. bool NetDataLog::checkFolderExist( const string & strPath)
  34. {
  35. if(_access(strPath.data(),) == )
  36. return true;
  37. else
  38. return false;
  39. }
  40. //********************************
  41. //函数名:NetDataLog::addLog
  42. //描 述:向文件中添加日志信息
  43. //参 数 log 为信息内容
  44. //返回值:void
  45. //*************************************
  46. void NetDataLog::addLog(string log)
  47. {
  48. string currentTime = getCurrentTime(); //获取本地时间
  49. if(m_timeFormat == NETLOG)
  50. *m_outputFile<<"["<<currentTime<<"] "<<log<<endl;
  51. else
  52. *m_outputFile<<currentTime<<" "<<log<<endl;
  53. //判断文件大小
  54. fileSizeLimit();
  55. }
  56. //********************************
  57. //函数名:NetDataLog::fileSizeLimit
  58. //描 述:判断文件大小是否达到最大值
  59. //参 数:无
  60. //返回值:void
  61. //*************************************
  62. void NetDataLog::fileSizeLimit()
  63. {
  64. int filesize = getCurrentLogFileSize();
  65. if(filesize>=m_MaxFileSize*)
  66. fileOffset();
  67.  
  68. }
  69. //********************************
  70. //函数名:NetDataLog::fileOffset
  71. //描 述:实现文件名的偏移
  72. //参 数:无
  73. //返回值:void
  74. //*************************************
  75. void NetDataLog::fileOffset()
  76. {
  77. m_outputFile->close(); //关闭当前文件
  78. char filename[]={};
  79. char newfilename[] = {};
  80. for(int i = m_FileCount-;i > ;i--)
  81. {
  82. memset(filename,,);
  83. sprintf(filename,"%s%d.txt",m_LogFileName.data(),i);
  84. if(checkFolderExist(filename)) //存在
  85. {
  86. if(i == m_FileCount-)
  87. {
  88. remove(filename);//删除文件
  89. continue;
  90. }
  91. //文件名序号向后偏移
  92. memset(newfilename,,);
  93. sprintf(newfilename,"%s%d.txt",m_LogFileName.data(),i+);
  94. rename(filename,newfilename);
  95. }
  96. }
  97. memset(filename,,);
  98. sprintf(filename,"%s.txt",m_LogFileName.data());
  99. sprintf(newfilename,"%s%d.txt",m_LogFileName.data(),);
  100. rename(filename,newfilename);
  101. m_outputFile->open(filename,ofstream::out|ofstream::app); //打开日志文件
  102. }
  103.  
  104. //********************************
  105. //函数名:NetDataLog::getCurrentLogFileSize
  106. //描 述:计算当前日记文件的大小
  107. //参 数:无
  108. //返回值:文件大小(KB)
  109. //*************************************
  110. int NetDataLog::getCurrentLogFileSize()
  111. {
  112. long long filepos = m_outputFile->tellp(); //保存当前文件位置
  113. m_outputFile->seekp(,ios_base::end); //移动到文件尾
  114. long long filesize = m_outputFile->tellp();
  115. m_outputFile->seekp(filepos,ios_base::beg); //恢复文件位置
  116. return filesize/;
  117.  
  118. }
  119. //获取文件名
  120. string NetDataLog::getLogFileName()
  121. {
  122. return m_LogFileName+".txt";
  123. }
  124. //设置文件个数
  125. void NetDataLog::setFileCount(int count)
  126. {
  127. m_FileCount = count;
  128. }
  129. //设置文件名
  130. void NetDataLog::setFileName(string filename)
  131. {
  132. m_LogFileName = m_strDir+string("\\")+filename;
  133. }
  134. //设置文件大小
  135. void NetDataLog::setMaxFileSize(int maxsize)
  136. {
  137. m_MaxFileSize = maxsize;
  138. }
  139.  
  140. //********************************
  141. //函数名:NetDataLog::getCurrentTime
  142. //描 述:获取本地时间
  143. //返回值:时间字符串
  144. //*************************************
  145. string NetDataLog::getCurrentTime()
  146. {
  147. time_t seconds = time(NULL); //获取时间
  148. struct tm *p;
  149. p = localtime(&seconds);//获取本地时间
  150. char strTime[] = {};
  151. if(m_timeFormat == NETLOG)
  152. sprintf(strTime,"%d\\%d\\%d %d.%d.%d",+p->tm_year,+p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);
  153. else
  154. sprintf(strTime,"%02d-%02d %02d:%02d:%02d",+p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);
  155. return string(strTime);
  156. }

转载:c++打印日志文件的一个模板的更多相关文章

  1. Log4j配置的经典总结,打印日志文件,日志存库

        一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制 日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Sy ...

  2. [转载]mysql慢日志文件分析处理

    原文地址:mysql慢日志文件分析处理作者:maxyicha mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysq ...

  3. python 接口测试1 --如何创建和打印日志文件

    python自带的logging实在是不好用,推荐使用logbook 思路如下: 1.创建path.py文件,获取工程根路径 2.创建log.py文件,在工程根路径下创建日志文件(文件名称按日期命名) ...

  4. java最简单实现Log打印和生成日志文件

    导包 1.commons-logging.jar包 下载 2.log4j.jar包 下载 配置log4j 1.在src根目录下创建一个log4j.properties文件. 文件全部内容如下: log ...

  5. Linux下日志文件监控系统Logwatch的使用记录

    Linux下日志文件监控系统Logwatch的使用记录 原文:http://www.cnblogs.com/kevingrace/p/6519504.html 在维护Linux服务器时,经常需要查看系 ...

  6. C#日志文件

    写日志文件是一个很常用的功能,以前都是别人写好的,直接调用的,近期写了一个小工具,因为比较小,所以懒得引用dll文件了,直接上网找了一个,很方便,现在记录下 public class LogClass ...

  7. 初识oracle重做日志文件

    转自 http://blog.csdn.net/indexman/article/details/7746948 以下易容翻译自oracle dba官方文档,不足之处还望指出. 管理重做日志文件 学习 ...

  8. mysqlbinlog- 处理二进制日志文件的实用工具 学习笔记

    参考 MySQL 5.5官方简体中文参考手册完美版  8.6 节 调用: shell> mysqlbinlog [option] log-files... mysqlbinlog支持下面选项: ...

  9. 利用log4net创建日志文件时过滤日志,这是坑还是?

    前言 网上貌似没有太多关于log4net过滤日志的资料,在研究过程中发现一点小问题,这里做下记录,希望对后续有用到的童鞋起到一丢丢帮助作用. log4net日志过滤 由于是在.NET Core中使用, ...

随机推荐

  1. 【Web应用-FTP】FTP 容量显示说明

    现象描述 Azure 门户显示的文件系统存储容量跟网站本身的磁盘空间不符. 问题分析 Azure Web 应用的文件系统存储用量和网站本身有关,具体容量如下所示: 但目前门户预览中关于 FTP 的容量 ...

  2. 【Web应用-大文件部署】上传超过 2M 的文件到 Azure PHP 网站失败

    问题描述 上传超过 2M 的文件到 Azure PHP 网站失败. 问题分析 由于 PHP 本身默认上传文件的上限是 2M,所以当上传超过2M的文件时会报错. 解决方法 根据以下步骤进行配置: 在 s ...

  3. 仿天猫淘宝的ShopNC好商城原生Android 客户端源码项目

    开发环境:Android Studio 2.0 | Gradle 2.0.0最后更新:2016-04-28 简介:基于好商城V4的Android客户端 目前已完成的功能(概述): 1.启动页 -> ...

  4. 第1节 flume:13、14、更多flume案例一,通过拦截器实现不同类型的数据区分

    1.6.flume案例一 1. 案例场景 A.B两台日志服务机器实时生产日志主要类型为access.log.nginx.log.web.log 现在要求: 把A.B 机器中的access.log.ng ...

  5. ubuntu 18.* 重启网卡

    systemctl UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active waiting A ...

  6. kubernetes添加不了google apt-key

    转自icepoint的博客 key来源 我的百度云盘 密码:v3wo 下载kube_apt_key.gpg到本地,上传到服务器后执行下面的命令 apt-get update && ap ...

  7. Apache Commons Configuration的应用

    Apache Commons Configuration的应用 Commons Configuration是一个java应用程序的配置管理工具.可以从properties或者xml文件中加载软件的配置 ...

  8. 基于PassThru的NDIS中间层驱动程序扩展

    基于PassThru的NDIS中间层驱动程序扩展                                  独孤求真 概要:开发一个NDIS驱动是一项相对复杂的工作,这一方面是由于核心驱动本身 ...

  9. ios retain copy assign相关

    assign: 简单赋值,不更改索引计数copy: 建立一个索引计数为1的对象,然后释放旧对象retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 Copy其实是建立了一 ...

  10. ios之自定义UISwitch

    系统自带的UISwitch是这样的: 既不能写字,也不能改颜色,于是在网上找到了这么一个自定义的Switch按钮,具体出处找不见了.记录一下,怕以后找不见了. 先看下效果图: 按钮的样式很多,可以文字 ...