c++ 日志(写到文件)
来源:互联网 发布:淘宝教学视频 编辑:程序博客网 时间:2024/05/17 23:11
/************filelog.h*****************************************************************************************/
#if !defined _FILE_FLOG_H
#define _FILE_FLOG_H
/*
*日志写入文件,
*
*
*/
#include <iostream>
#include <ios>
#include <time.h>
#include <fstream>
#include <stdio.h>
#include <stdarg.h>
#include <string>
#include <sstream>
#include <errno.h>
#include <cutil.h>
#include <map>
using namespace std;
using namespace CPPSocket;
namespace CPPSocket
{
class FLOG{
public:
typedef enum RANK
{
ERROR = 0,
WARN = 1,
INFO = 2,
DEBUG = 3
}LOGRANK;
public:
FLOG();
~FLOG();
void init(map<string,string>& cfg);
void init(string filename,LOGRANK rank=INFO,bool m_isBuf=false);
FLOG& getTime(LOGRANK rank);
template<class T> friend FLOG& operator<<(FLOG& out,T i)
{
if( out.m_rank <= out.m_initRank )
out.m_os<<i;
return out;
}
friend FLOG& operator<<(FLOG& out,LOGRANK rank) //设置日志级别
{
out.m_rank = rank;
return out;
}
friend FLOG& operator<<(FLOG& out,FLOG& lout)
{
return out;
}
friend FLOG& operator<<(FLOG& out,ostream& (*fendl)(ostream&))
{
if( out.m_rank <= out.m_initRank ){
out.openlog();
if(out.m_fileOpen){
out.m_os<<"/n";
out.m_logfile<<out.m_os.str();
if(!out.m_isBuf) out.m_logfile<<flush;
}else cout<<out.m_os.str()<<endl;
out.m_os.str(""); //清空缓冲区
}
out.m_rank = FLOG::LOG_INFO; //恢复日志默认级别
return out;
}
private:
FLOG& operator=(FLOG& log);
FLOG(FLOG& log);
void openlog();
private:
string m_logname;
string m_cur_logname;
ofstream m_logfile;
stringstream m_os;
bool m_fileOpen;
LOGRANK m_rank;
LOGRANK m_initRank;
bool m_isBuf;
public:
static const LOGRANK LOG_ERROR = ERROR;
static const LOGRANK LOG_WARN = WARN;
static const LOGRANK LOG_INFO = INFO;
static const LOGRANK LOG_DEBUG = DEBUG;
};
namespace FILELOG
{
typedef FLOG LOG;
extern FLOG mlog;
}
}
using namespace CPPSocket::FILELOG;
#endif
/*******************************************filelog.cpp*****************************************/
#include "filelog.h"
#include <sstream>
using namespace CPPSocket;
namespace CPPSocket
{
namespace FILELOG
{
FLOG mlog;
}
FLOG::FLOG():m_fileOpen(false),m_rank(INFO),m_initRank(INFO),m_isBuf(false)
{
}
FLOG::~FLOG()
{
if(m_fileOpen){
cout<<"[close file]"<<m_cur_logname<<endl;
m_logfile.close();
m_fileOpen = false;
}
}
void FLOG::init(string filename,LOGRANK rank,bool isBuf)
{
cout<<"into FLOG::init"<<endl;
m_initRank = rank;
m_isBuf = isBuf;
if(filename.size()==0) return;
m_logname = filename;
m_cur_logname = m_logname + T::getTime();
cout<<"[log file name]"<<m_cur_logname<<endl;
m_logfile.open(m_cur_logname.c_str(),ios::out|ios::app);
if(!m_logfile){
m_fileOpen = false;
return;
}
cout<<m_cur_logname<<"open sucess."<<endl;
m_fileOpen = true;
}
void FLOG:: init(map<string,string>& cfg)
{
string fname = "";
LOGRANK rank = INFO;
bool isBuf = false;
map<string,string>::iterator it = cfg.find("FILE");
if(it != cfg.end()) fname = it->second;
it = cfg.find("RANK");
if(it != cfg.end()){
if("ERROR" == it->second) rank = LOG::LOG_ERROR;
else if("WARN" == it->second) rank = LOG::LOG_WARN;
else if("INFO" == it->second) rank = LOG::LOG_INFO;
else if("DEBUG" == it->second) rank = LOG::LOG_DEBUG;
}
it = cfg.find("ISBUF");
if(it != cfg.end()){
if("TRUE" == it->second) isBuf = true;
else if("FALSE" == it->second) isBuf = false;
}
init(fname,rank,isBuf);
}
void FLOG::openlog()
{
if(!m_fileOpen) return;
if(1792*1024*1024 < m_logfile.tellp()){ // FLOG文件不超过1.8GB
m_logfile.close();
m_cur_logname = m_logname + T::getTime();
m_logfile.open(m_cur_logname.c_str(),ios::out|ios::app);
if(m_logfile.fail()) m_fileOpen = false;
else m_fileOpen = true;
}
}
FLOG& FLOG:: getTime(LOGRANK rank)
{
m_rank = rank;
if( m_rank <= m_initRank )
m_os<<T::getTime1();
return *this;
}
}
/*******************************************************test.cpp*********************/
#include<iostream>
#incldue "filelog.h"
using namesapce std;
using namesapce CPPSocket;
int main(int argc,char * argv[])
{
mlog.init("/tmp/log.log",LOG::LOG_ERROR);
mlog<<LOG::LOG_ERROR<<T::getTime1()<<"test LOG_ERROR"<<endl;
mlog.getTime(LOG::LOG_ERROR)<<"test LOG_ERROR"<<endl;
mlog<<LOG::LOG_WARN<<T::getTime1()<<"test LOG_WARN"<<endl;
mlog<<LOG::LOG_INFO<<T::getTime1()<<"test LOG_INFO"<<endl;
mlog<<LOG::LOG_DEBUG<<T::getTime1()<<"test LOG_DEBUG"<<endl;
mlog<<LOG::LOG_ERROR<<T::getTime1()<<"test end---------"<<endl;
return 0;
}
- C写日志文件
- c++ 日志(写到文件)
- Linux C写日志文件
- Java Web - 日志-log4j(一)--写到控制台、写到log文件
- CDbLogRoute写日志文件到MySQL数据库
- 写程序的日志到文件
- 使用Log4j.jar写日志到文件
- java异步写日志到文件中
- 多线程写到一个日志文件中
- (转)C语言写文件或日志
- C语言写文件或日志
- php 写内容到文件,把日志写到log文件
- php 写内容到文件,把日志写到log文件
- php 写内容到文件,把日志写到log文件
- Linux C写数据到文件中
- c、c++写数据到文件
- 写日志到文本文件
- 写日志到专案目录下的txt文件中
- 细说JAVA运行环境和J2EE运行环境的搭建
- eclipse3.3.X版本中文语言包下载及安装
- 用一张图描述 Ajax 实现流程及所用到的技术
- spring2.5.4+hibernate3.2.6+struts2+jbpm3.2.2
- SAP如何装字体?
- c++ 日志(写到文件)
- PHP header函数用法 Tips
- 验证日期格式
- 升级tomcat后出现的页面录入框中文乱码问题解决方法
- 新的开始
- 在嵌入式开发平台中实现USB设备的自动挂载
- html:select 标签下拉项不让选择的一个笨办法
- VSS的Invalid handle错误
- Error configuring application listener of class org.springframework.web.context.ContextLoaderListener