Implemented logging utilities

This commit is contained in:
Pablo Rodriguez
2025-07-28 08:29:53 -04:00
parent 9a38c557f0
commit 472d35497d
16 changed files with 138 additions and 26 deletions

11
source/log/CMakeLists.txt Normal file
View File

@@ -0,0 +1,11 @@
project(UglyLogLib)
add_library(${PROJECT_NAME}
./src/globals.cpp
./src/TimestampLog.cpp
)
target_include_directories(${PROJECT_NAME}
PUBLIC ./include
PRIVATE ./src
)

View File

@@ -0,0 +1,13 @@
#pragma once
#include <format>
#include <string_view>
namespace ugly {
class ILogFacility {
public:
virtual void vlog(std::string_view fmt, std::format_args args) = 0;
};
}

View File

@@ -0,0 +1,24 @@
#pragma once
#include "ILogFacility.hpp"
#include <format>
namespace ugly {
class LogAlias {
public:
ILogFacility *mpLog;
template<typename ...Args>
LogAlias &operator()(std::format_string<Args...> format, Args &&...args) {
if(mpLog) {
mpLog->vlog(format.get(), std::make_format_args(args...));
}
return *this;
}
};
extern LogAlias log;
}

View File

@@ -0,0 +1,24 @@
#pragma once
#include "ILogFacility.hpp"
#include <chrono>
#include <format>
#include <ostream>
#include <string_view>
#include <string>
namespace ugly {
class TimestampLog: virtual public ILogFacility {
private:
std::ostream &mrOutputStream;
std::string mDescription;
std::chrono::high_resolution_clock::time_point mStart;
public:
TimestampLog(std::ostream &os, std::string_view description);
void vlog(std::string_view fmt, std::format_args args) override;
};
}

View File

@@ -0,0 +1,18 @@
#include "TimestampLog.hpp"
#include <format>
#include <chrono>
ugly::TimestampLog::TimestampLog(std::ostream &os, std::string_view description):
mrOutputStream{os},
mDescription{description},
mStart{std::chrono::high_resolution_clock::now()} {}
void ugly::TimestampLog::vlog(std::string_view fmt, std::format_args args) {
auto now = std::chrono::high_resolution_clock::now();
auto timestamp = std::chrono::duration_cast<std::chrono::duration<float>>(now - mStart).count();
auto message = std::vformat(fmt, args);
mrOutputStream << std::format("[{:9.4f}] {}: {}\n", timestamp, mDescription, message);
}

View File

@@ -0,0 +1,3 @@
#include "LogUtils.hpp"
ugly::LogAlias ugly::log{nullptr};