以下是我做的一个比较实用精巧的日志类,还没完善
/**
* @file Logger.h
* @author yangjb
* @date 2007/08/24
* @version 0.0.1
* @brief 日志输出辅助类
*
* Copyright? Yangjb. All rights reserved.
*
* Change Log:
* <pre>
* author time version description
* --------------------------------------------------------------------------------------
* yangjb 2007/08/24 0.0.1 create
* </pre>
*/
#ifndef _LOGGER_HEADER_
#define _LOGGER_HEADER_
#include <iostream>
#include <ostream>
#include <fstream>
#include <string>
using namespace std;
template<typename CharT_ = char>
class CLogger
{
public:
enum OUTPUT_FLAGS {of_none = 0,
of_pre_date = 1,
of_pre_time = 2,
of_pre_datetime = 4,
of_app_return = 8};
/**
* @brief 调试输出标志
*/
static bool bDebug;
/**
* @brief 流输出重载运算, 实现流方式输出日志
* @param[in] t 输出日志信息
*/
template<typename T>
CLogger& operator<< (const T& t)
{
if (m_bOutputFlag)
{
*m_plogstream << t;
}
return *this;
}
/**
* @brief 缺省构造函数, 使用cout方式做为日志输出
*/
CLogger()
{
m_plogstream = &cout;
m_bOutputFlag = bDebug;
}
/**
* @brief 构造函数, 使用特定文件做为日志输出流向
*/
CLogger(string filename, int fileflag = 0)
{
m_plogstream = new basic_ofstream<CharT_>(filename.c_str());
m_bOutputFlag = bDebug;
}
/**
* @brief 析构函数
*/
~CLogger()
{
if ((m_plogstream) && (m_plogstream != &cout))
{
delete m_plogstream;
}
}
/**
* @brief 打开/关闭输出
* @param[in] bOutputFlag 缺省true, 输出标识
*/
void OpenOutput(bool bOutputFlag = true)
{
m_bOutputFlag = bOutputFlag;
}
/**
* @brief 输出格式标志
* @param[in] nFlags 输出格式标志(暂未用)
*/
void SetOutputFlags(int nFlags)
{
m_nFlags = nFlags;
}
private:
bool m_bOutputFlag;
int m_nFlags;
string m_filename;
basic_ostream<CharT_>* m_plogstream;
};
#endif
/*
* @file: testlog.cpp
* @brief: 测试日志类
*/
#include "Logger.h"
template<>
bool CLogger<char>::bDebug = true;
int main(int argv, char** argc)
{
CLogger<char> termLog;
termLog << "hello world";
termLog.OpenOutput(false);
termLog << "This line won't show your term";
CLogger<char> fileLog("test.txt");
fileLog << "hello world";
fileLog.OpenOutput(false);
fileLog << "This line won't show your term";
};