1 -- 简易日志库
平时会写些小的程序,需要打日志,但又不想整个大的日志库,所以自己就写个简单点的,需要的时候就直接下载使用即可。
//将该文件保存为console.hpp
#ifndef __CONSOLE_HPP__
#define __CONSOLE_HPP__
#include <stdio.h>
#include <string>
#include <stdarg.h>
class console
{
public:
static bool initialize(const std::string & path);
static void log(char * format, ...);
static void close();
private:
static FILE * _flogfile;
static std::string _slogfile;
static const std::string SLOGFILE;
};
FILE * console::_flogfile = NULL;
std::string console::_slogfile = "";
const std::string console::SLOGFILE = "/tmp/console.log";
bool console::initialize(const std::string & path)
{
//已经打开过,直接返回
if (_flogfile != NULL && (path == _slogfile || path == SLOGFILE))
{
return true;
}
//目前已经打开的非本次指定日志文件
if (_flogfile != NULL)
{
fclose(_flogfile);
_flogfile = NULL;
}
//打开日志文件
_slogfile = path;
_flogfile = ::fopen(path.c_str(), "a+");
return _flogfile != NULL;
}
void console::close()
{
::fclose(_flogfile);
_flogfile = NULL;
}
void console::log(char * format, ...)
{
initialize(SLOGFILE);
if (_flogfile != NULL)
{
va_list arg_ptr;
va_start(arg_ptr, format);
vfprintf(_flogfile, format, arg_ptr);
va_end(arg_ptr);
fwrite("\n", 1, 1, _flogfile);
fflush(_flogfile);
}
}
#endif
2 -- 简易日志库的使用方法
#include "console.hpp"
int main(int argc, char ** argv)
{
//STEP01 需要在打印日志之前,初始化日志的存放地点。
// 如果不调用initialize进行初始化,那么日志的默认位置为:/tmp/console.log
console::initialize("/home/motadou/main.log");
//STEP02 写日志到文件
console::log("main.cpp::%d %s", argc, argv[0]);
//TODO:....
}