Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 39 additions & 24 deletions src/log.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#include "log.h"

#include <sys/stat.h>

#include "main.h"


Expand All @@ -13,40 +15,53 @@ static std::string replaceAll(std::string subject, const std::string& search, co
return subject;
}

void Log::init()
{
struct stat buffer;
if( stat(FILEACTIVE, &buffer) == 0) {
_logActive = 1;
} else {
_logActive = 0;
}
}

int Log::logWithLevel(unsigned int level, const char *str ...)
{
FILE *fp = iv_fopen(FILEPATH, "a");
if ( _logActive == 1 ) {
FILE *fp = iv_fopen(FILEPATH, "a");

char outerBuffer[2048];
char innerBuffer[1500];
char outerBuffer[2048];
char innerBuffer[1500];

va_list args;
va_start(args, str);
vsnprintf(innerBuffer, sizeof(innerBuffer), str, args);
va_end(args);
va_list args;
va_start(args, str);
vsnprintf(innerBuffer, sizeof(innerBuffer), str, args);
va_end(args);

const char *levelsStrings[] = {"debug", "info", "warn", "error"};
if (level > sizeof(levelsStrings) - 1) {
level = sizeof(levelsStrings) - 1;
}
const char *levelsStrings[] = {"debug", "info", "warn", "error"};
if (level > sizeof(levelsStrings) - 1) {
level = sizeof(levelsStrings) - 1;
}

// As we are writing HTML logs, we must escape the HTML special characters!
std::string escaped = replaceAll(innerBuffer, "&", "&amp;");
escaped = replaceAll(escaped, "<", "&lt;");
escaped = replaceAll(escaped, ">", "&gt;");
// As we are writing HTML logs, we must escape the HTML special characters!
std::string escaped = replaceAll(innerBuffer, "&", "&amp;");
escaped = replaceAll(escaped, "<", "&lt;");
escaped = replaceAll(escaped, ">", "&gt;");

time_t ts = time(NULL);
struct tm* tm_info;
tm_info = gmtime(&ts);
char time_buffer[32];
strftime(time_buffer, sizeof(time_buffer), "%Y:%m:%d %H:%M:%S", tm_info);
time_t ts = time(NULL);
struct tm* tm_info;
tm_info = gmtime(&ts);
char time_buffer[32];
strftime(time_buffer, sizeof(time_buffer), "%Y:%m:%d %H:%M:%S", tm_info);

snprintf(outerBuffer, sizeof(outerBuffer), "[%s][%s] %s<br>\n", time_buffer, levelsStrings[level], escaped.c_str());
int written = iv_fwrite(outerBuffer, sizeof(char), strlen(outerBuffer), fp);
snprintf(outerBuffer, sizeof(outerBuffer), "[%s][%s] %s<br>\n", time_buffer, levelsStrings[level], escaped.c_str());
int written = iv_fwrite(outerBuffer, sizeof(char), strlen(outerBuffer), fp);

iv_fclose(fp);
iv_fclose(fp);

return written;
return written;
} else {
return 0;
}
}

8 changes: 7 additions & 1 deletion src/log.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,20 @@ class Log
return instance;
}

void init();

Log(Log const&) = delete;
void operator=(Log const&) = delete;

private:
const char *DIR = FLASHDIR;
const char *FILEPATH = FLASHDIR "/plop-reader-logs.html";
const char *FILEACTIVE = FLASHDIR "/plop-reader-activate-log.txt";
int _logActive = 1;

Log() {};
Log() {
init();
};
~Log() {};
};

Expand Down