32 std::unique_ptr<std::ofstream> _file;
36 std::string get_timestamp();
37 static bool create_directory(
const std::string&
path);
38 static std::string get_directory_from_path(
const std::string&
filepath);
53 _file = std::make_unique<std::ofstream>(
filepath, std::ios::out | std::ios::app);
54 if (_file->is_open()) {
56 _file->seekp(0, std::ios::end);
57 if (_file->tellp() == 0) {
58 (*_file) <<
header << std::endl;
62 }
catch (
const std::exception&
e) {
68 if (_file && _file->is_open()) {
75 if (!_is_open || !_file)
return;
84 if (!_is_open || !_file)
return;
103 if (create_directory(
"tests/logs")) {
110inline bool CSVLogger::create_directory(
const std::string&
path) {
117 if (
next_pos == std::string::npos) {
141inline std::string CSVLogger::get_directory_from_path(
const std::string&
filepath) {
149inline std::string CSVLogger::get_timestamp() {
150 auto now = std::chrono::system_clock::now();
151 auto time_t = std::chrono::system_clock::to_time_t(
now);
152 auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(
153 now.time_since_epoch()) % 1000;
155 std::ostringstream
oss;
156 oss << std::put_time(std::localtime(&
time_t),
"%Y-%m-%d %H:%M:%S");
157 oss <<
"." << std::setfill(
'0') << std::setw(3) <<
ms.count();
Definition csv_logger.h:19
void log(const std::string &csv_line)
Definition csv_logger.h:74
static std::string create_vehicle_log_dir(unsigned int vehicle_id)
Definition csv_logger.h:95
CSVLogger(const std::string &filepath, const std::string &header)
Definition csv_logger.h:42
void flush()
Definition csv_logger.h:83
bool is_open() const
Definition csv_logger.h:91
~CSVLogger()
Definition csv_logger.h:67
Select_Debug<(Traits< T >::debugged &&Traits< Debug >::error)> db(Debug_Error l)
Definition debug.h:166
Header * header()
Definition protocol.h:3