63 lines
1.6 KiB
C++
63 lines
1.6 KiB
C++
#include "Logger.h"
|
|
#include "FatalHandler.h"
|
|
|
|
Logger& Logger::GetCoreLogger() {
|
|
static Logger coreLogger;
|
|
return coreLogger;
|
|
}
|
|
|
|
Logger& Logger::GetAppLogger() {
|
|
static Logger appLogger;
|
|
return appLogger;
|
|
}
|
|
|
|
Logger::Logger() {}
|
|
|
|
void Logger::AddOutputStream(std::ostream* stream) {
|
|
outputStreams.push_back(stream);
|
|
}
|
|
|
|
void Logger::SetLogLevel(LogLevel level) {
|
|
logLevel = level;
|
|
}
|
|
|
|
void Logger::Log(LogLevel level, const std::string& message) {
|
|
if (level >= logLevel) {
|
|
LogInternal(level, message);
|
|
}
|
|
}
|
|
|
|
void Logger::LogInternal(LogLevel level, const std::string& message) {
|
|
std::string time = GetCurrentTime();
|
|
std::string levelStr = LevelToString(level);
|
|
|
|
for (auto* stream : outputStreams) {
|
|
*stream << time << " [" << levelStr << "]: " << message << std::endl;
|
|
}
|
|
}
|
|
|
|
std::string Logger::GetCurrentTime() {
|
|
auto now = std::chrono::system_clock::now();
|
|
auto in_time_t = std::chrono::system_clock::to_time_t(now);
|
|
|
|
std::stringstream ss;
|
|
ss << std::put_time(std::localtime(&in_time_t), "%Y/%m/%d %H:%M:%S");
|
|
return ss.str();
|
|
}
|
|
|
|
std::string Logger::LevelToString(LogLevel level) {
|
|
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";
|
|
}
|
|
}
|
|
|
|
template<typename... Args>
|
|
void Logger::FatalHandler(const std::string& format, Args... args) {
|
|
IsoEngine::FatalHandler(format, args...);
|
|
} |