转载: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中使用, ...
随机推荐
- 【Web应用-FTP】FTP 容量显示说明
现象描述 Azure 门户显示的文件系统存储容量跟网站本身的磁盘空间不符. 问题分析 Azure Web 应用的文件系统存储用量和网站本身有关,具体容量如下所示: 但目前门户预览中关于 FTP 的容量 ...
- 【Web应用-大文件部署】上传超过 2M 的文件到 Azure PHP 网站失败
问题描述 上传超过 2M 的文件到 Azure PHP 网站失败. 问题分析 由于 PHP 本身默认上传文件的上限是 2M,所以当上传超过2M的文件时会报错. 解决方法 根据以下步骤进行配置: 在 s ...
- 仿天猫淘宝的ShopNC好商城原生Android 客户端源码项目
开发环境:Android Studio 2.0 | Gradle 2.0.0最后更新:2016-04-28 简介:基于好商城V4的Android客户端 目前已完成的功能(概述): 1.启动页 -> ...
- 第1节 flume:13、14、更多flume案例一,通过拦截器实现不同类型的数据区分
1.6.flume案例一 1. 案例场景 A.B两台日志服务机器实时生产日志主要类型为access.log.nginx.log.web.log 现在要求: 把A.B 机器中的access.log.ng ...
- ubuntu 18.* 重启网卡
systemctl UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active waiting A ...
- kubernetes添加不了google apt-key
转自icepoint的博客 key来源 我的百度云盘 密码:v3wo 下载kube_apt_key.gpg到本地,上传到服务器后执行下面的命令 apt-get update && ap ...
- Apache Commons Configuration的应用
Apache Commons Configuration的应用 Commons Configuration是一个java应用程序的配置管理工具.可以从properties或者xml文件中加载软件的配置 ...
- 基于PassThru的NDIS中间层驱动程序扩展
基于PassThru的NDIS中间层驱动程序扩展 独孤求真 概要:开发一个NDIS驱动是一项相对复杂的工作,这一方面是由于核心驱动本身 ...
- ios retain copy assign相关
assign: 简单赋值,不更改索引计数copy: 建立一个索引计数为1的对象,然后释放旧对象retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 Copy其实是建立了一 ...
- ios之自定义UISwitch
系统自带的UISwitch是这样的: 既不能写字,也不能改颜色,于是在网上找到了这么一个自定义的Switch按钮,具体出处找不见了.记录一下,怕以后找不见了. 先看下效果图: 按钮的样式很多,可以文字 ...