You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
2.1 KiB
109 lines
2.1 KiB
/* |
|
* Copyright (C) 2022 Riyyi |
|
* |
|
* SPDX-License-Identifier: MIT |
|
*/ |
|
|
|
#include <cstdio> // FILE |
|
#include <string> |
|
|
|
#include "util/format/color.h" |
|
#include "util/format/log.h" |
|
|
|
namespace Util::Format { |
|
|
|
std::string formatTimeElapsed() |
|
{ |
|
return format("{:.3}s ", s_timer.elapsedNanoseconds() / 1000000000.0); |
|
} |
|
|
|
std::string formatType(LogType type) |
|
{ |
|
std::string output; |
|
|
|
formatTo(output, "["); |
|
switch (type) { |
|
case LogType::Trace: |
|
formatTo(output, "trace"); |
|
break; |
|
case LogType::Debug: |
|
formatTo(output, fg(TerminalColor::Magenta), "debug"); |
|
break; |
|
case LogType::Success: |
|
formatTo(output, fg(TerminalColor::Green), "success"); |
|
break; |
|
case LogType::Info: |
|
formatTo(output, fg(TerminalColor::Blue), "info"); |
|
break; |
|
case LogType::Warn: |
|
formatTo(output, Emphasis::Bold | fg(TerminalColor::Yellow), "warn"); |
|
break; |
|
case LogType::Error: |
|
formatTo(output, Emphasis::Bold | fg(TerminalColor::Red), "error"); |
|
break; |
|
case LogType::Critical: |
|
formatTo(output, Emphasis::Bold | fg(TerminalColor::White) | bg(TerminalColor::Red), "critical"); |
|
break; |
|
default: |
|
break; |
|
}; |
|
formatTo(output, "] "); |
|
|
|
return output; |
|
} |
|
|
|
// ----------------------------------------- |
|
|
|
LogOperatorStyle::LogOperatorStyle(FILE* file, LogType type) |
|
: m_file(file) |
|
, m_type(type) |
|
, m_stream() |
|
, m_builder(m_stream) |
|
{ |
|
m_stream << formatTimeElapsed(); |
|
m_stream << formatType(type); |
|
} |
|
|
|
LogOperatorStyle::~LogOperatorStyle() |
|
{ |
|
m_stream.write("\n", 1); |
|
std::string string = m_stream.str(); |
|
fputs(string.c_str(), m_file); |
|
} |
|
|
|
LogOperatorStyle trace() |
|
{ |
|
return LogOperatorStyle(stdout, LogType::Trace); |
|
} |
|
|
|
LogOperatorStyle debug() |
|
{ |
|
return LogOperatorStyle(stdout, LogType::Debug); |
|
} |
|
|
|
LogOperatorStyle success() |
|
{ |
|
return LogOperatorStyle(stdout, LogType::Success); |
|
} |
|
|
|
LogOperatorStyle info() |
|
{ |
|
return LogOperatorStyle(stdout, LogType::Info); |
|
} |
|
|
|
LogOperatorStyle warn() |
|
{ |
|
return LogOperatorStyle(stderr, LogType::Warn); |
|
} |
|
|
|
LogOperatorStyle error() |
|
{ |
|
return LogOperatorStyle(stderr, LogType::Error); |
|
} |
|
|
|
LogOperatorStyle critical() |
|
{ |
|
return LogOperatorStyle(stderr, LogType::Critical); |
|
} |
|
|
|
} // namespace Util::Format
|
|
|