fxos/lib/log.cpp

63 lines
1.2 KiB
C++

#include <fxos/log.h>
#include <iostream>
#include <map>
namespace FxOS::Log {
/* Currently configured log level */
static int loglevel = LEVEL_WRN;
/* Level of the last message */
static int lastlevel = -1;
/* Prefixes for each level */
static std::map<int,std::string> prefixes = {
{ LEVEL_WRN, "warning: " },
{ LEVEL_ERR, "error: " },
};
/* Select the log level */
void log_setminlevel(int level)
{
loglevel = level;
}
/* Get the minimum log level */
int log_getminlevel()
{
return loglevel;
}
/* General message logger */
void logmsg(int level, char const *function, std::string message)
{
if(level < loglevel) return;
bool endline = true;
bool prefix = true;
/* Add a newline if last line was unfinished, but level changed */
if(lastlevel >= 0 && lastlevel != level) std::cerr << '\n';
else if(lastlevel >= 0) prefix = false;
if(message.size() && message.back() == '\\')
{
endline = false;
message.pop_back();
}
if(prefix)
{
if(level == LEVEL_LOG) std::cerr << "[" << function << "] ";
std::cerr << prefixes[level];
}
else std::cerr << " ";
std::cerr << message;
lastlevel = -1;
if(endline) std::cerr << '\n';
else lastlevel = level;
}
} /* namespace FxOS::Log */