#ifndef MOOON_SYS_SIMPLE_LOGGER_H #define MOOON_SYS_SIMPLE_LOGGER_H // 只要定义了NOT_WITH_MOOON宏, // 则本文件和mooon无任何关系,方便集成到自己的代码中 #define NOT_WITH_MOOON #if !defined(NOT_WITH_MOOON) #include#endif // NOT_WITH_MOOON #include #include #include #include #if !defined(NOT_WITH_MOOON) SYS_NAMESPACE_BEGIN #endif // NOT_WITH_MOOON template inline std::string any2string(AnyType any_value) { std::stringstream result_stream; result_stream << any_value; return result_stream.str(); } inline void get_current_datetime(char* datetime_buffer, size_t datetime_buffer_size) { struct tm result; time_t now = time(NULL); localtime_r(&now, &result); snprintf(datetime_buffer, datetime_buffer_size ,"%04d-%02d-%02d %02d:%02d:%02d",result.tm_year+1900, result.tm_mon+1, result.tm_mday ,result.tm_hour, result.tm_min, result.tm_sec); } class CSimpleLogger { public: CSimpleLogger(const std::string& log_dir,const std::string& filename,unsigned int log_size = 1024*1024*100 ,unsigned char log_numer = 10 ,unsigned short record_size = 8192); ~CSimpleLogger(); bool is_ok() const; void print(const char* format, ...); void flush(); private: void reset();void roll_log(); private: FILE* _fp;char* _log_buffer;int _bytes_writed;std::string _log_dir; std::string _filename;unsigned int _log_size; unsigned char _log_numer; unsigned short _record_size;}; inline CSimpleLogger::CSimpleLogger(const std::string& log_dir,const std::string& filename ,unsigned int log_size ,unsigned char log_numer ,unsigned short record_size):_fp(NULL),_log_buffer(NULL),_bytes_writed(0),_log_dir(log_dir),_filename(filename),_log_size(log_size),_log_numer(log_numer),_record_size(record_size) { std::string log_path = log_dir + std::string("/") + filename; _fp = fopen(log_path.c_str(), "a"); if (_fp != NULL) { if (-1 == fseek(_fp, 0, SEEK_END)) { // 失败,将不会写日志 fclose(_fp); _fp = NULL; } else{ // 取得已有大小 _bytes_writed = ftell(_fp); // 不能太小气了 if (_log_size < 1024) {
来自mooon的最简单的日志类CSimpleLogger
2025-06-23 19:01 点击:0