diff --git a/handlers/connection.cpp b/handlers/connection.cpp index 63efaa5..d4e43e7 100644 --- a/handlers/connection.cpp +++ b/handlers/connection.cpp @@ -20,7 +20,7 @@ void Connection::onConnect() {} void Connection::onDisconnect(gloox::ConnectionError e) {} -bool Connection::onTLSConnect(const gloox::CertInfo&) { +bool Connection::onTLSConnect(const gloox::CertInfo& info) { return true; } diff --git a/logger.cpp b/logger.cpp index d53d303..03ead4a 100644 --- a/logger.cpp +++ b/logger.cpp @@ -4,6 +4,79 @@ #include "logger.h" #include +#include + +static constexpr std::string_view logLevelMap[] = { + "DEBUG", // 0 + "WARNING", // 1 + "ERROR", // 2 +}; + +static constexpr std::string_view colorMap[] = { + "\033[32m", // DEBUG (Green) + "\033[33m", // WARNING (Yellow) + "\033[31m", // ERROR (Red) +}; + +static constexpr std::string_view clear = "\033[0m"; +static constexpr std::string_view bold = "\033[1m"; + +void writeTimestamp() { + std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); + std::time_t time_now = std::chrono::system_clock::to_time_t(now); + std::tm local_time = *std::localtime(&time_now); + std::chrono::milliseconds millis = std::chrono::duration_cast(now.time_since_epoch()) % 1000; + + std::cout << "\033[90m" << std::put_time(&local_time, "%Y-%m-%d %H:%M:%S"); + std::cout << "." << std::setfill('0') << std::setw(3) << millis.count(); + std::cout << clear << ' '; +} + +constexpr std::string_view getLogLevel(gloox::LogLevel level) { + return (level >= 0 && level < 3) ? logLevelMap[level] : "UNKNOWN"; +} + +constexpr std::string_view getColor(gloox::LogLevel level) { + return (level >= 0 && level < 3) ? colorMap[level] : ""; +} + +void writeTags(gloox::LogArea area) { + if (area & gloox::LogAreaClassParser) + std::cout << " [Parser]"; + if (area & gloox::LogAreaClassConnectionTCPBase) + std::cout << " [Connection]"; + if (area & gloox::LogAreaClassClient) + std::cout << " [Client]"; + if (area & gloox::LogAreaClassClientbase) + std::cout << " [Client Base]"; + if (area & gloox::LogAreaClassComponent) + std::cout << " [Component]"; + if (area & gloox::LogAreaClassDns) + std::cout << " [DNS]"; + if (area & gloox::LogAreaClassConnectionHTTPProxy) + std::cout << " [HTTP Proxy]"; + if (area & gloox::LogAreaClassConnectionSOCKS5Proxy) + std::cout << " [SOCKS5 Proxy]"; + if (area & gloox::LogAreaClassConnectionTCPClient) + std::cout << " [TCP Client]"; + if (area & gloox::LogAreaClassConnectionTCPServer) + std::cout << " [TCP Server]"; + if (area & gloox::LogAreaClassS5BManager) + std::cout << " [SOCKS5 Bytestream Manager]"; + if (area & gloox::LogAreaClassSOCKS5Bytestream) + std::cout << " [SOCKS5 Bytestream]"; + if (area & gloox::LogAreaLinkLocalManager) + std::cout << " [Link Local Manager]"; + if (area & gloox::LogAreaXmlIncoming) + std::cout << " \033[1;36m[XML IN]"; + if (area & gloox::LogAreaXmlOutgoing) + std::cout << " \033[1;35m[XML OUT]"; + if (area & gloox::LogAreaUser) + std::cout << " [USER]"; + + if (area == gloox::LogAreaClassDns) + std::cout << '\t'; +} Logger::Logger(gloox::LogSink& sink, gloox::LogLevel level): sink(sink) @@ -16,5 +89,8 @@ Logger::~Logger() { } void Logger::handleLog(gloox::LogLevel level, gloox::LogArea area, const std::string& message) { - std::cout << "Log message: " << message << std::endl; + writeTimestamp(); + std::cout << getColor(level) << bold << "[" << getLogLevel(level) << "]" << clear << bold; + writeTags(area); + std::cout << clear << '\t' << message << clear << std::endl; } diff --git a/logger.h b/logger.h index cd02b3d..bf86085 100644 --- a/logger.h +++ b/logger.h @@ -13,6 +13,7 @@ public: void handleLog(gloox::LogLevel level, gloox::LogArea area, const std::string& message) override; + private: gloox::LogSink& sink; gloox::LogLevel level;