Files
LearningVulkan/Logger.cpp
2026-01-05 10:36:27 -05:00

64 lines
1.6 KiB
C++

#include "Logger.h"
#include <iostream>
void Log::Message(Level Level, const std::string& Message, const std::source_location& Location)
{
std::string FullFunc = Location.function_name();
std::string DisplayName = FullFunc; // Default to full function name
// Simple cleanup: try to extract just class::method
size_t LastColon = FullFunc.rfind("::");
if (LastColon != std::string::npos)
{
// Find the class name start
size_t ClassStart = FullFunc.rfind(' ', LastColon);
if (ClassStart != std::string::npos)
{
std::string ClassName = FullFunc.substr(ClassStart + 1, LastColon - ClassStart - 1);
// Find method name end (first parenthesis after last ::)
size_t MethodEnd = FullFunc.find('(', LastColon);
if (MethodEnd != std::string::npos)
{
std::string MethodName = FullFunc.substr(LastColon + 2, MethodEnd - LastColon - 2);
DisplayName = ClassName + "::" + MethodName + "()";
}
}
}
std::string LevelString;
switch (Level)
{
case Level::Info:
LevelString = "INFO";
break;
case Level::Warning:
LevelString = "WARNING";
break;
case Level::Error:
LevelString = "ERROR";
break;
case Level::Debug:
LevelString = "DEBUG";
break;
case Level::VkValidation:
LevelString = "VALIDATION LAYER";
break;
case Level::DeviceSetup:
LevelString = "DEVICE SETUP";
break;
default:
LevelString = "UNKNOWN";
break;
}
std::string LogMessage = std::format("[{}] [{}] {}",
LevelString, DisplayName, Message);
std::cout << LogMessage << std::endl;
if (Level == Level::Error)
{
throw std::runtime_error(LogMessage);
}
}