mirror of
https://github.com/open-goal/jak-project
synced 2026-05-31 01:16:12 -04:00
2d11e44eaf
* start cleanup * fix typos * fix syntax highlighting in doc * lots of documentation updates * clean and add tests * more documentation and more error messages * more document and try building kernel differently
70 lines
1.3 KiB
C++
70 lines
1.3 KiB
C++
#include <stdexcept>
|
|
#include "Logger.h"
|
|
|
|
void Logger::close() {
|
|
if (fp) {
|
|
fclose(fp);
|
|
fp = nullptr;
|
|
}
|
|
}
|
|
|
|
void Logger::set_file(std::string filename) {
|
|
if (fp) {
|
|
fclose(fp);
|
|
}
|
|
|
|
fp = fopen(filename.c_str(), "w");
|
|
if (!fp) {
|
|
throw std::runtime_error("invalid file name " + filename + " in logger");
|
|
}
|
|
}
|
|
|
|
void Logger::log(LoggerMessageKind kind, const char* format, ...) {
|
|
FILE* dest = nullptr;
|
|
auto& settings = config[kind];
|
|
switch (settings.kind) {
|
|
case LOG_STDERR:
|
|
dest = stderr;
|
|
break;
|
|
case LOG_STDOUT:
|
|
dest = stdout;
|
|
break;
|
|
case LOG_IGNORE:
|
|
dest = nullptr;
|
|
break;
|
|
case LOG_FILE:
|
|
dest = fp;
|
|
break;
|
|
default:
|
|
throw std::runtime_error("unknown log destination in log");
|
|
}
|
|
|
|
if (!dest)
|
|
return;
|
|
|
|
if (!settings.prefix.empty()) {
|
|
fprintf(dest, "%s", settings.prefix.c_str());
|
|
}
|
|
|
|
if (settings.color != COLOR_NORMAL) {
|
|
const char* color_codes[] = {"", "[0;31m", "[0;32m", "[0;36m"};
|
|
printf("\033%s", color_codes[settings.color]);
|
|
}
|
|
|
|
va_list arglist;
|
|
va_start(arglist, format);
|
|
vfprintf(dest, format, arglist);
|
|
va_end(arglist);
|
|
|
|
if (settings.color != COLOR_NORMAL) {
|
|
printf("\033[0m");
|
|
fflush(stdout);
|
|
}
|
|
|
|
// todo, does this make things slow?
|
|
if (settings.kind == LOG_FILE) {
|
|
fflush(fp);
|
|
}
|
|
}
|
|
|
|
Logger gLogger; |