转载:c++打印日志文件的一个模板
转载地址: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++打印日志文件的一个模板的更多相关文章
- Log4j配置的经典总结,打印日志文件,日志存库
一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制 日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Sy ...
- [转载]mysql慢日志文件分析处理
原文地址:mysql慢日志文件分析处理作者:maxyicha mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysq ...
- python 接口测试1 --如何创建和打印日志文件
python自带的logging实在是不好用,推荐使用logbook 思路如下: 1.创建path.py文件,获取工程根路径 2.创建log.py文件,在工程根路径下创建日志文件(文件名称按日期命名) ...
- java最简单实现Log打印和生成日志文件
导包 1.commons-logging.jar包 下载 2.log4j.jar包 下载 配置log4j 1.在src根目录下创建一个log4j.properties文件. 文件全部内容如下: log ...
- Linux下日志文件监控系统Logwatch的使用记录
Linux下日志文件监控系统Logwatch的使用记录 原文:http://www.cnblogs.com/kevingrace/p/6519504.html 在维护Linux服务器时,经常需要查看系 ...
- C#日志文件
写日志文件是一个很常用的功能,以前都是别人写好的,直接调用的,近期写了一个小工具,因为比较小,所以懒得引用dll文件了,直接上网找了一个,很方便,现在记录下 public class LogClass ...
- 初识oracle重做日志文件
转自 http://blog.csdn.net/indexman/article/details/7746948 以下易容翻译自oracle dba官方文档,不足之处还望指出. 管理重做日志文件 学习 ...
- mysqlbinlog- 处理二进制日志文件的实用工具 学习笔记
参考 MySQL 5.5官方简体中文参考手册完美版 8.6 节 调用: shell> mysqlbinlog [option] log-files... mysqlbinlog支持下面选项: ...
- 利用log4net创建日志文件时过滤日志,这是坑还是?
前言 网上貌似没有太多关于log4net过滤日志的资料,在研究过程中发现一点小问题,这里做下记录,希望对后续有用到的童鞋起到一丢丢帮助作用. log4net日志过滤 由于是在.NET Core中使用, ...
随机推荐
- 洛谷 P2419 [USACO08JAN]牛大赛Cow Contest
题目背景 [Usaco2008 Jan] 题目描述 N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a p ...
- codevs 2776 寻找代表元
时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用1到n编号.广州二中苏元实验 ...
- 欧拉函数求在1-n-1与n互质的个数
long long phi(long long x) { long long res=x,a=x,i; ;i*i<=a;i++) { ) { res=res/i*(i-); ) a=a/i; } ...
- valgrind测试程序内存泄漏问题
1.用wincap将valgrind放入系统任意路径下,解压 2. 登录主机后台在需要测试程序的路径下运行此行命令: /opt/valgrind/bin/valgrind ./itb(例) 3. 跑 ...
- websocket 入门
什么是websocket WebSocket是HTML5新增的协议,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,比如说,服务器可以在任意时刻发送消息给浏览器. 为什么会出现 webs ...
- Bootstrap历练实例:验证状态
验证状态 Bootstrap 包含了错误.警告和成功消息的验证样式.只需要对父元素简单地添加适当的 class(.has-warning. .has-error 或 .has-success)即可使用 ...
- iterator方法和for方法 遍历数据库user表结果集ResultSet
首先,把连接数据库的语句做成工具类,因为会一直用到这几句 代码如下: package com.swift.jdbc; import java.sql.Connection; import java.s ...
- 洛谷 P2921 在农场万圣节
https://www.luogu.org/problemnew/show/P2921 开始感觉这题30行代码就可以搞定,还是太菜啦,还是乖乖地写了tarjan. 对图进行缩点,那么这个强联通分量中的 ...
- 【Java_基础】java类加载过程与双亲委派机制
1.类的加载.连接和初始化 当程序使用某个类时,如果该类还未被加载到内存中,则系统会通过加载.连接.初始化三个步骤来对类进行初始化.如果没有意外,jvm将会连续完成这三个步骤,有时也把这三个步骤统称为 ...
- nginx正则配置解释和fastadmin
参考:http://www.cnblogs.com/netsa/p/6383094.html 1 2 3 4 5 6 7 8 9 10 11 1.^: 匹配字符串的开始位置: 2. $:匹配字符串 ...