简易c++版本日志库
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:.... }