//.h
#include <stdint.h>
#include <fstream>
#include <mutex>
class File {
public:
static File &instance();
void write(const std::string &str);
private:
File();
~File();
File(const File &) = delete;
File & operator = (const File &) = delete;
private:
static File *file_;
static std::mutex mutex_;
private:
std::ofstream out_;
};
//.cc
File* File::file_ = NULL;
std::mutex File::mutex_;
File::File() {
out_.open(stats_log_file_name(), std::ofstream::out | std::ofstream::app);
if(!out_.is_open()){
CLS_LOG_ERROR << "Open stats file error, file:", cls::Config::instance().stats_log_file_name();
}
}
File::~File(){
if(out_.is_open()){
out_.close();
}
}
File &File::instance() {
if (file_ == NULL) {
std::lock_guard<std::mutex> guard(mutex_);
if (file_ == NULL) {
file_ = new File();
}
}
return *file_;
}
void File::write(const std::string &str) {
out_ << str;
out_.flush();
}