From c37bd3e34f5840773949bb55848cda3af6688d20 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Wed, 5 Mar 2025 23:44:56 +0800 Subject: refactor: logging system --- src/format.hpp | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/format.hpp (limited to 'src/format.hpp') diff --git a/src/format.hpp b/src/format.hpp new file mode 100644 index 0000000..2630b7f --- /dev/null +++ b/src/format.hpp @@ -0,0 +1,76 @@ +#pragma once +#include +#include + +enum class eFormatType { + RAW, // No formatting at all + STANDARD, // Standard message format + SYSTEM, // System message format + ERROR, // Error message format + CHAT, // Chat message format (username: message) + INFO, // Info level log format + WARN, // Warning level log format + FATAL // Fatal level log format +}; + +class CFormatter { + public: + template + static std::string fmt(eFormatType type, std::format_string fmt, Args &&...args, bool addNewline = true) { + std::string formatted = std::vformat(fmt.get(), std::make_format_args(args...)); + if (addNewline && !formatted.empty() && formatted.back() != '\n') + formatted += '\n'; + + switch (type) { + case eFormatType::RAW: + return formatted; + case eFormatType::STANDARD: + return "[MSG] " + formatted; + case eFormatType::SYSTEM: + return "[SYS] " + formatted; + case eFormatType::ERROR: + return "[ERR] " + formatted; + case eFormatType::CHAT: + return formatted; // handled by chatFmt + case eFormatType::INFO: + return "[INFO] " + formatted; + case eFormatType::WARN: + return "[WARN] " + formatted; + case eFormatType::FATAL: + return "[FATAL] " + formatted; + default: + return formatted; + } + } + + template + static std::string chatFmt(const std::string &username, std::format_string fmt, Args &&...args) { + std::string formatted = std::vformat(fmt.get(), std::make_format_args(args...)); + return std::format("{}: {}", username, formatted); + } +}; + +template +inline std::string fmtRaw(std::format_string fmt, Args &&...args, bool addNewline = true) { + return CFormatter::fmt(eFormatType::RAW, fmt, std::forward(args)..., addNewline); +} + +template +inline std::string fmtStd(std::format_string fmt, Args &&...args, bool addNewline = true) { + return CFormatter::fmt(eFormatType::STANDARD, fmt, std::forward(args)..., addNewline); +} + +template +inline std::string fmtSys(std::format_string fmt, Args &&...args, bool addNewline = true) { + return CFormatter::fmt(eFormatType::SYSTEM, fmt, std::forward(args)..., addNewline); +} + +template +inline std::string fmtErr(std::format_string fmt, Args &&...args, bool addNewline = true) { + return CFormatter::fmt(eFormatType::ERROR, fmt, std::forward(args)..., addNewline); +} + +template +inline std::string fmtChat(const std::string &username, std::format_string fmt, Args &&...args) { + return CFormatter::chatFmt(username, fmt, std::forward(args)...); +} -- cgit v1.2.3