首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

std:clog如何将日志写到文件呢

2013-02-27 
std::clog怎么将日志写到文件呢?std::clog怎么将日志写到文件呢?看好多例子都是输出到屏幕的clog[解决办法

std::clog怎么将日志写到文件呢?
std::clog怎么将日志写到文件呢?看好多例子都是输出到屏幕的 clog
[解决办法]
clog其实是一个ostream的对象。

extern ostream clog;

写文件的话,用ofstream
[解决办法]
__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 ostream clog;

使用
ifstream iFile;
ofstream oFile;
fstream ioFile;
来操作文件
[解决办法]
引用:
C/C++ code?1__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 ostream clog;
使用
ifstream iFile;
ofstream oFile;
fstream ioFile;
来操作文件


clog就一ostream类型变量
[解决办法]
流重定向

    ofstream logfile("D:\\error.log");
    clog.rdbuf(logfile.rdbuf());
    clog<<"error";

[解决办法]
我刚写的,供你参考。
/*comments are welcome via email: bruceadi@hotmail.com*/
//
//start of header file
//
#include <string>
#include <fstream>
#include <sstream>
#include <iostream>

#define LOG_LEVEL__DEBUG 0
#define LOG_LEVEL_INFO  1
#define LOG_LEVEL_WARN  2
#define LOG_LEVEL_ERROR 3
#define LOG_LEVEL_COUNT 4

//default log level
#ifndef LOG_LEVEL
#define LOG_LEVEL LOG_LEVEL__DEBUG
#endif


#define LOG_HEAD "["<< __FUNCTION__ << " at " << __FILE__ << ":" << __LINE__ << "]"  

#if LOG_LEVEL >  LOG_LEVEL_DEBUG
#define LOG_DEBUG(msg) ; 
#else
#define LOG_DEBUG(msg) Logger<LogWriter>(LogWriter::instance()).get() << LOG_HEAD << "[DEBUG]["<< msg <<"]";
#endif


#if LOG_LEVEL >  LOG_LEVEL_INFO
#define LOG_INFO(msg) ; 
#else
#define LOG_INFO(msg) Logger<LogWriter>(LogWriter::instance()).get() << LOG_HEAD << "[INFO]["<< msg << "]";
#endif

#if LOG_LEVEL >  LOG_LEVEL_WARN
#define LOG_WARN(msg) ; 
#else
#define LOG_WARN(msg) Logger<LogWriter>(LogWriter::instance()).get() << LOG_HEAD << "[WARN]["<< msg << "]";
#endif


#if LOG_LEVEL >  LOG_LEVEL_ERROR
#define LOG_ERROR(msg) ; 
#else
#define LOG_ERROR(msg) Logger<LogWriter>(LogWriter::instance()).get() << LOG_HEAD << "[ERROR]["<< msg << "]";
#endif


template <typename LogWriter>
class Logger
{
public:
Logger(LogWriter& logWriter ) : logWriter_(logWriter){}
~Logger()
{
oss_ << std::endl;
logWriter_.write(oss_.str());
}  
std::ostringstream& get() { return oss_; }


private:
LogWriter& logWriter_;
std::ostringstream oss_;
};

class LogWriter
{
public:
void write(std::string const& msg);
static LogWriter& instance()  
{
static LogWriter writer;
return writer;
}
private:
~LogWriter(){};
};
/**to control how to write logs, one should just change the implementention**/
inline void LogWriter::write(std::string const& msg){ std::cerr << msg;}
//
//end of header file
//

int magic()
{
return 89777;
}

int main()
{
LOG_INFO("start");
int mg = magic();
if(mg > 56)
{
LOG_WARN("mg: " << mg << " > 56");
}
LOG_INFO("exit");
return 0;
}

热点排行