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

NetDataLog.h

#ifndef NETDATALOG_H
#define NETDATALOG_H
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <direct.h>
#include <string>
#include <io.h>
#include <stdlib.h>
#include <time.h>
#include <fcntl.h> using namespace std;
enum TIMEFORMAT
{
NETLOG = , // [yyyy\mm\dd hh.MM.ss]
LOGINLOG=, // mm-dd hh:MM:ss
}; class NetDataLog
{
public:
NetDataLog(string strDir = "log",string filename = "record",int maxfilesize=,int filecount=,int timeformat=);
~NetDataLog(); void addLog(string log); //添加日志记录到日志文件
void fileSizeLimit(); //判断文件大小是否达到限定值
int getCurrentLogFileSize();//获取当前日志文件的大小
string getLogFileName(); //获取日志文件名称
void setMaxFileSize(int);//设置文件最大大小
void setFileName(string); //设置日志文件名
void setFileCount(int); //设置日志文件的个数
void setLogDir(string strDir); //设置日志文件目录
private:
void fileOffset(); //文件名称进行偏移
bool checkFolderExist(const string &strPath);
string getCurrentTime(); private:
string m_LogFileName; //文件名
int m_MaxFileSize; //文件大小
int m_FileCount; //文件个数
fstream *m_outputFile; //输出文件流
string m_strDir; //目录
int m_timeFormat; };
#endif

NetDataLog.cpp

#include "stdafx.h"
#include "NetDataLog.h"
NetDataLog::NetDataLog(string strDir,string filename,int maxsize,int filecount,int timeFormat)
{
m_strDir = strDir;
m_LogFileName = m_strDir+string("\\")+filename;
m_MaxFileSize = maxsize;
m_FileCount = filecount;
m_timeFormat = timeFormat; //判断日志目录是否存在
if(!checkFolderExist(m_strDir.c_str()))
{
_mkdir(m_strDir.c_str());
}
m_outputFile = new fstream;
string strname = m_LogFileName+".txt";
m_outputFile->open(strname.c_str(),ofstream::out|ofstream::app); //打开日志文件
bool b=m_outputFile->is_open(); }
NetDataLog::~NetDataLog()
{
if(m_outputFile)
delete m_outputFile;
}
//********************************
//函数名:NetDataLog::checkFolderExist
//描 述:测试目录是否存在
//参 数:strPath 目录名
//返回值:存在返回真
//*************************************
bool NetDataLog::checkFolderExist( const string & strPath)
{
if(_access(strPath.data(),) == )
return true;
else
return false;
}
//********************************
//函数名:NetDataLog::addLog
//描 述:向文件中添加日志信息
//参 数 log 为信息内容
//返回值:void
//*************************************
void NetDataLog::addLog(string log)
{
string currentTime = getCurrentTime(); //获取本地时间
if(m_timeFormat == NETLOG)
*m_outputFile<<"["<<currentTime<<"] "<<log<<endl;
else
*m_outputFile<<currentTime<<" "<<log<<endl;
//判断文件大小
fileSizeLimit();
}
//********************************
//函数名:NetDataLog::fileSizeLimit
//描 述:判断文件大小是否达到最大值
//参 数:无
//返回值:void
//*************************************
void NetDataLog::fileSizeLimit()
{
int filesize = getCurrentLogFileSize();
if(filesize>=m_MaxFileSize*)
fileOffset(); }
//********************************
//函数名:NetDataLog::fileOffset
//描 述:实现文件名的偏移
//参 数:无
//返回值:void
//*************************************
void NetDataLog::fileOffset()
{
m_outputFile->close(); //关闭当前文件
char filename[]={};
char newfilename[] = {};
for(int i = m_FileCount-;i > ;i--)
{
memset(filename,,);
sprintf(filename,"%s%d.txt",m_LogFileName.data(),i);
if(checkFolderExist(filename)) //存在
{
if(i == m_FileCount-)
{
remove(filename);//删除文件
continue;
}
//文件名序号向后偏移
memset(newfilename,,);
sprintf(newfilename,"%s%d.txt",m_LogFileName.data(),i+);
rename(filename,newfilename);
}
}
memset(filename,,);
sprintf(filename,"%s.txt",m_LogFileName.data());
sprintf(newfilename,"%s%d.txt",m_LogFileName.data(),);
rename(filename,newfilename);
m_outputFile->open(filename,ofstream::out|ofstream::app); //打开日志文件
} //********************************
//函数名:NetDataLog::getCurrentLogFileSize
//描 述:计算当前日记文件的大小
//参 数:无
//返回值:文件大小(KB)
//*************************************
int NetDataLog::getCurrentLogFileSize()
{
long long filepos = m_outputFile->tellp(); //保存当前文件位置
m_outputFile->seekp(,ios_base::end); //移动到文件尾
long long filesize = m_outputFile->tellp();
m_outputFile->seekp(filepos,ios_base::beg); //恢复文件位置
return filesize/; }
//获取文件名
string NetDataLog::getLogFileName()
{
return m_LogFileName+".txt";
}
//设置文件个数
void NetDataLog::setFileCount(int count)
{
m_FileCount = count;
}
//设置文件名
void NetDataLog::setFileName(string filename)
{
m_LogFileName = m_strDir+string("\\")+filename;
}
//设置文件大小
void NetDataLog::setMaxFileSize(int maxsize)
{
m_MaxFileSize = maxsize;
} //********************************
//函数名:NetDataLog::getCurrentTime
//描 述:获取本地时间
//返回值:时间字符串
//*************************************
string NetDataLog::getCurrentTime()
{
time_t seconds = time(NULL); //获取时间
struct tm *p;
p = localtime(&seconds);//获取本地时间
char strTime[] = {};
if(m_timeFormat == NETLOG)
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);
else
sprintf(strTime,"%02d-%02d %02d:%02d:%02d",+p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);
return string(strTime);
}

转载: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. 后台安装 SQL Server 无人值守 安装

    (开头闲淡)项目需要必须安装SQL的,查了很久,断断续续用了各种方法,今天终于用了正确的姿(xia)势(mo)弄成了. 最开始用的方法是调用Win的API模拟鼠标操作安装的,嗯,虽然勉强可以,就是有些 ...

  2. 如何用JavaScript判断前端应用运行环境(移动平台还是桌面环境)

    我们部署在某些云平台或者Web服务器上的前端应用,既可以用PC端浏览器访问,也可以用手机上的浏览器访问. 在前端应用里,有时候我们需要根据运行环境的不同做出对应处理.比如下面这段逻辑,如果判断出应用当 ...

  3. (转)SpringMVC学习(五)——SpringMVC的参数绑定

    http://blog.csdn.net/yerenyuan_pku/article/details/72511611 SpringMVC中的参数绑定还是蛮重要的,所以单独开一篇文章来讲解.本文所有案 ...

  4. UVA 1151 Buy or Build (最小生成树)

    先求出原图的最小生成树,然后枚举买哪些套餐,把一个套餐内的点相互之间边权为0,直接用并查集缩点.正确性是基于一个贪心, 在做Kruskal算法是,对于没有进入最小生成树的边,排序在它前面的边不会减少. ...

  5. 【工具篇】在.Net中实现HTML生成图片或PDF的几种方式

    前段时间由于项目上的需求,要在.Net平台下实现把HTML内容生成图片或PDF文件的功能,特意在网上研究了几种方案,这里记录一下以备日后再次使用.当时想着找一种开发部署都比较清爽并且运行稳定的方案,但 ...

  6. python之道06

    1,使⽤循环打印以结果: * *** ***** ******* ********* 答案: 方法一: for i in range(10): if i % 2 == 1: print(i*'*') ...

  7. CS193p Lecture 7 - Views, Gestures

    Views 如何绘制自定义图像 Gestures 如何处理用户手势操作 Views 1.它是基本的构造块,代表屏幕上一块矩形区域,定义了一个坐标空间,在此空间中可以绘制,可以添加触控事件: 2.它是分 ...

  8. viewDidLoad、viewWillAppear、viewWillDisappear

    - (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil viewDidLo ...

  9. iOS 第三方类库之MBProgressHUD

    github链接地址 MBProgressHUD是一个开源的第三方类库实现了很多种样式的提示框,类似Activity indicator,使用上简单.方便,并且可以对显示的内容进行自定义,功能很强大, ...

  10. windows 7虚拟机与主机不能互ping通,但是都能与网关ping通

    这里是在Windows 10的环境下使用VMware安装了一个Windows 7的虚拟机,虚拟机中是使用桥接的方式.结果发现虚拟机不能与物理机互通,但是却能与网关互通.查看虚拟机和物理机的IP发现都是 ...