C++打印日志输出文件
来源:互联网 发布:卡夫卡的作品推荐 知乎 编辑:程序博客网 时间:2024/05/20 13:19
做后台服务程序很多情况下都需要打印日志输出,我这里有简单的C++使用的打印日志输出文件可以直接复制粘贴使用,很方便,直接贴代码了。
#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 = 0,//[yyyy\mm\dd hh.MM.ss]LOGINLOG=1,//mm-dd hh:MM:ss};class NetDataLog{public:NetDataLog(string strDir = "log",string filename = "record",int maxfilesize=0,int filecount=0,int timeformat=0);~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
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,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(),0) == 0)return true;elsereturn 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*1024)fileOffset();} //********************************//函数名:NetDataLog::fileOffset//描 述:实现文件名的偏移//参 数:无//返回值:void//*************************************void NetDataLog::fileOffset(){m_outputFile->close();//关闭当前文件char filename[100]={0};char newfilename[100] = {0};for(int i = m_FileCount-1;i > 0;i--){memset(filename,0,100);sprintf(filename,"%s%d.txt",m_LogFileName.data(),i);if(checkFolderExist(filename)) //存在{if(i == m_FileCount-1){remove(filename);//删除文件continue;}//文件名序号向后偏移memset(newfilename,0,100);sprintf(newfilename,"%s%d.txt",m_LogFileName.data(),i+1);rename(filename,newfilename);}}memset(filename,0,100);sprintf(filename,"%s.txt",m_LogFileName.data());sprintf(newfilename,"%s%d.txt",m_LogFileName.data(),1);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(0,ios_base::end);//移动到文件尾long long filesize = m_outputFile->tellp();m_outputFile->seekp(filepos,ios_base::beg);//恢复文件位置return filesize/1024;}//获取文件名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[100] = {0};if(m_timeFormat == NETLOG)sprintf(strTime,"%d\\%d\\%d %d.%d.%d",1900+p->tm_year,1+p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);elsesprintf(strTime,"%02d-%02d %02d:%02d:%02d",1+p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);return string(strTime);}
1 0
- C++打印日志输出文件
- C++ 打印输出日志文件
- 03.日志打印输出
- 终端输出打印日志
- tomcat配置log4j打印输出日志到指定文件
- tomcat配置log4j打印输出日志到指定文件
- Date命令日志打印输出
- 工具类——Log日志打印,输出到文件,过滤显示日志位置
- Linux c日志打印
- 一个精炼到c语言文件日志打印
- jni开发中在c文件中打印log日志
- Android 输出C文件打印的log信息
- OC和C头文件及打印输出区别
- android 日志文件输出
- Qt输出日志文件
- Qt输出打印信息的日志到文件(简单的两种方式)
- 常用的Log日志打印与输出
- 常用的Log日志打印与输出 .
- KMP入门必做-周期
- 跑跑卡丁车(0-1背包)
- Lucas 定理学习小结,组合数取模
- java面向对象高级进程与线程
- 使用Crowd自带Demo,自定义Application接入,并实现SSO
- C++打印日志输出文件
- 延迟执行方法
- 数据结构实验之栈六:下一较大值(二)
- 状态栏颜色设置
- mysql 中触发器的使用
- Linux_常用命令之压缩解压之gzip
- $("#").dataTable().fnDraw(boolean)重绘方法失效问题
- MAC环境配置SDK
- FZU 2020(LUCAS)@