diff --git a/code/components/jomjol_fileserver_ota/server_file.cpp b/code/components/jomjol_fileserver_ota/server_file.cpp index 1fd75a59..b6fc8312 100644 --- a/code/components/jomjol_fileserver_ota/server_file.cpp +++ b/code/components/jomjol_fileserver_ota/server_file.cpp @@ -347,7 +347,7 @@ static esp_err_t send_datafile(httpd_req_t *req, bool send_full_file) httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); - // Since the log file is still open for writing, we need to close it first + // Since the log file is still could open for writing, we need to close it first LogFile.CloseLogFileAppendHandle(); fd = fopen(currentfilename.c_str(), "r"); diff --git a/code/components/jomjol_logfile/ClassLogFile.cpp b/code/components/jomjol_logfile/ClassLogFile.cpp index 92bcb202..5e7cc0d8 100644 --- a/code/components/jomjol_logfile/ClassLogFile.cpp +++ b/code/components/jomjol_logfile/ClassLogFile.cpp @@ -19,6 +19,10 @@ extern "C" { static const char *TAG = "LOGFILE"; +/* Uncomment this to keep the logfile open for appending. + * If commented out, the logfile gets opened/closed for each log measage (old behaviour) */ +//#define KEEP_LOGFILE_OPEN_FOR_APPENDING + ClassLogFile LogFile("/sdcard/log/message", "log_%Y-%m-%d.txt", "/sdcard/log/data", "data_%Y-%m-%d.csv"); void ClassLogFile::WriteHeapInfo(std::string _id) @@ -161,7 +165,7 @@ bool ClassLogFile::GetDataLogToSD(){ return doDataLogToSD; } -static FILE* logFileAppendHande = NULL; +static FILE* logFileAppendHandle = NULL; std::string fileNameDate; @@ -231,34 +235,48 @@ void ClassLogFile::WriteToFile(esp_log_level_t level, std::string tag, std::stri std::string fullmessage = "[" + formatedUptime + "] " + ntpTime + "\t<" + loglevelString + ">\t" + message + "\n"; + +#ifdef KEEP_LOGFILE_OPEN_FOR_APPENDING if (fileNameDateNew != fileNameDate) { // Filename changed // Make sure each day gets its own logfile // Also we need to re-open it in case it needed to get closed for reading std::string logpath = logroot + "/" + fileNameDateNew; ESP_LOGI(TAG, "Opening logfile %s for appending", logpath.c_str()); - logFileAppendHande = fopen(logpath.c_str(), "a+"); - if (logFileAppendHande==NULL) { + logFileAppendHandle = fopen(logpath.c_str(), "a+"); + if (logFileAppendHandle==NULL) { ESP_LOGE(TAG, "Can't open log file %s", logpath.c_str()); return; } fileNameDate = fileNameDateNew; } - +#else + std::string logpath = logroot + "/" + fileNameDateNew; + logFileAppendHandle = fopen(logpath.c_str(), "a+"); + if (logFileAppendHandle==NULL) { + ESP_LOGE(TAG, "Can't open log file %s", logpath.c_str()); + return; + } + #endif - fputs(fullmessage.c_str(), logFileAppendHande); + fputs(fullmessage.c_str(), logFileAppendHandle); - fflush(logFileAppendHande); - fsync(fileno(logFileAppendHande)); +#ifdef KEEP_LOGFILE_OPEN_FOR_APPENDING + fflush(logFileAppendHandle); + fsync(fileno(logFileAppendHandle)); +#else + CloseLogFileAppendHandle(); +#endif } void ClassLogFile::CloseLogFileAppendHandle() { - - fclose(logFileAppendHande); - logFileAppendHande = NULL; - fileNameDate = ""; + if (logFileAppendHandle != NULL) { + fclose(logFileAppendHandle); + logFileAppendHandle = NULL; + fileNameDate = ""; + } }