linux 上编写一个Log库
来源:互联网 发布:观测数据 英文 编辑:程序博客网 时间:2024/06/14 08:00
因为上课的缘故,老师让我们用c++编一个log库,有以下要求
A、日志的输出格式为:[2013-04-17 12:23:17] [DEBUG] file no find
B、日志文件在超过1K大小后,自动新建一个日志文件。
C、当日志文件超过10个后,自动从第一个日志文件重新记录。
java用惯了,c++就是麻烦啊。闲来无事发到网上吧,说不定谁会有用呢先是得到时间的头文件
/* * getTime.h * * Created on: 2013-4-25 * Author: sun */#if !defined(IOSTREAM_INCLUDED)#include <iostream>#endif#if !defined(TIME_H_INCLUDED)#include <time.h>#endif#if !defined(STRING_INCLUDED)#include <string>#endif#if !defined(SSTREAM_INCLUDED)#include <sstream>#endifusing namespace std;string getTime() {time_t timep;struct tm *p_tm;timep = time(NULL);p_tm = localtime(&timep); /*获取本地时区时间*/string str;ostringstream os;os<<'['<<p_tm->tm_year+1900<<'-'<<p_tm->tm_mon+1<<'-'<<p_tm->tm_mday<<' '<<p_tm->tm_hour<<':'<<p_tm->tm_min<<':'<<p_tm->tm_sec<<']';return os.str();}这是主要的MyLog类,因为没有牵涉到具体的程序,所以还不是很完整,不过上面的要求是达到了的
/* * Log.h * * Created on: 2013-4-25 * Author: sun */#if !defined(GETTIME_H_INCLUDED)#include "getTime.h"#endif#if !defined(FSTREAM_INCLUDED)#include <fstream>#endifusing namespace std;class MyLog {private:string filepath;int disp_level;int lognumber;bool clear;public:void writeLog(int level, string str);MyLog(int disp_level, string filepath, int lognumber);};MyLog::MyLog(int disp_level, string filepath, int lognumber) {this->disp_level = disp_level;this->filepath = filepath;this->lognumber = lognumber;this->clear = false;}void MyLog::writeLog(int level, string str) {//判断,若level小鱼disp_level,则不予输出if (level < disp_level) {return;}//生成输出日志的stringostringstream os;os<<getTime()<<" [DEBUG] "<<str;string ostr = os.str();fstream ioFile;string temp = filepath;//判断,若clear=false,则照常打开日志文件,从末尾开始添加,若clear=true,则清空文件,从头开始添加if(!clear) {ioFile.open(temp.append(1,'0'+lognumber).c_str(),ios::out|ios::app);}else {ioFile.open(temp.append(1,'0'+lognumber).c_str(),ios::out|ios::trunc);clear = false;}//判断,如果文件读取失败则报错!if(!ioFile) {cout<<"open error!"<<endl;return;}//读取文件指针的位置,从而得到文件大小streampos ps = ioFile.tellg();cout << "File size: " << ps << endl;//判断如果文件大小大于1024即1K,那么就将log编号加1,如果大于9则回到0,且每次变化后都使clear=trueif(ps > 1024) {lognumber++;if (lognumber > 9) {lognumber = 0;}clear = true;//重新调用writeLog函数,且将原来的fstream关闭writeLog(level, str);ioFile.close();return;}//将日志写入日志文件ioFile<<ostr<<endl;ioFile.close();cout<<"write \""<<ostr<<"\" to \""<<temp<<"\""<<endl;}最后写个主函数测试一下
/* * main.cpp * * Created on: 2013-4-25 * Author: sun */#include "MyLog.h"using namespace std;int main(void) {MyLog* mylog = new MyLog(1,"/home/sun/log",0);int i;for(i=0;i<11;i++) {mylog->writeLog(1,"my log!");}delete(mylog);return 0;}因为不怎么登csdn,若有问题请发我的邮箱:sxf20778@gmail.com
- linux 上编写一个Log库
- 【Linux】编写一个进度条
- 一个高大上的Log工具
- 编写linux网络设备驱动(上)
- 在Linux上,编写一个每秒接收100万UDP数据包的程序究竟有多难
- 在Linux 上,编写一个每秒接收 100万UDP数据包的程序究竟有多难?
- 一个很吧帮的log库
- Android上定义一个懒人专用的log
- linux上编写守护进程的例程
- linux上编写守护进程的例程
- linux上编写守护进程的例程
- 编写Linux网络设备驱动(上)
- 编写Linux网络设备驱动(上)
- 编写Linux网络设备驱动(上)
- 编写Linux网络设备驱动(上)
- 编写Linux网络设备驱动(上)
- 编写Linux网络设备驱动(上)
- linux上LCD应用程序编写 柏贵林
- 汇编指令速查
- js优化原则
- 巧用正则查找或替换
- Lua源码分析 -- 虚拟机以及指令解释
- Linux C 实现生产者消费者问题
- linux 上编写一个Log库
- likely() 和 unlikely() 功能分析
- 记一次薪酬谈判的教训
- c++中使用预处理器进行调试
- C++标准库 Utilities library typeinfo
- 常用颜色的网络编码 及中英文名称
- git学习:开始使用git
- Mp4文件相关开源库
- Windows server 2003 CA配置(一)