IsoEngine/src/Logger.cpp

63 lines
1.6 KiB
C++
Raw Normal View History

2024-09-09 02:50:07 -06:00
#include "Logger.h"
#include "FatalHandler.h"
2024-09-09 02:50:07 -06:00
Logger& Logger::GetCoreLogger() {
static Logger coreLogger;
return coreLogger;
2024-09-09 02:50:07 -06:00
}
Logger& Logger::GetAppLogger() {
static Logger appLogger;
return appLogger;
2024-09-09 02:50:07 -06:00
}
Logger::Logger() {}
2024-09-09 02:50:07 -06:00
void Logger::AddOutputStream(std::ostream* stream) {
outputStreams.push_back(stream);
2024-09-09 02:50:07 -06:00
}
void Logger::SetLogLevel(LogLevel level) {
logLevel = level;
2024-09-09 02:50:07 -06:00
}
void Logger::Log(LogLevel level, const std::string& message) {
if (level >= logLevel) {
LogInternal(level, message);
2024-09-09 02:50:07 -06:00
}
}
2024-09-09 02:50:07 -06:00
void Logger::LogInternal(LogLevel level, const std::string& message) {
std::string time = GetCurrentTime();
std::string levelStr = LevelToString(level);
2024-09-09 02:50:07 -06:00
for (auto* stream : outputStreams) {
*stream << time << " [" << levelStr << "]: " << message << std::endl;
2024-09-09 02:50:07 -06:00
}
}
std::string Logger::GetCurrentTime() {
auto now = std::chrono::system_clock::now();
auto in_time_t = std::chrono::system_clock::to_time_t(now);
2024-09-09 02:50:07 -06:00
std::stringstream ss;
ss << std::put_time(std::localtime(&in_time_t), "%Y/%m/%d %H:%M:%S");
return ss.str();
2024-09-09 02:50:07 -06:00
}
std::string Logger::LevelToString(LogLevel level) {
2024-09-09 02:50:07 -06:00
switch (level) {
case LogLevel::TRACE_l: return "TRACE";
case LogLevel::DEBUG_l: return "DEBUG";
case LogLevel::INFO_l: return "INFO";
case LogLevel::WARN_l: return "WARN";
case LogLevel::ERROR_l: return "ERROR";
case LogLevel::FATAL_l: return "FATAL";
default: return "UNKNOWN";
2024-09-09 02:50:07 -06:00
}
}
template<typename... Args>
void Logger::FatalHandler(const std::string& format, Args... args) {
IsoEngine::FatalHandler(format, args...);
}