build system and module refactoring + simple histogram scratch (#20)
* scratch adding histogram to image views Histograms should come from some sort of histogram service. This is currently just a POC. * custom logger implementation w/o spdlog * missing cmake file * fix tests * use operator<< over direct stream exposure * rm print header * add threading test + refactor towards interface libraries omits the need for =target_include_directories= calls /everywhere/ * rm print header * rm constexpr * templated thread_pool * fix doxyfile * default enable doc building * czi reader refactor * rm erroneous include expression * clang-format * single lib include with PUBLIC visibility * compile imgui stdlib * clang format * documentation update centralize `LogLevelToString` to `ILog.hpp` update docs and examples
This commit is contained in:
committed by
Maximilian Kueffner
parent
b37814204f
commit
c00c2c71ac
@@ -0,0 +1,73 @@
|
||||
#include "PixelariumLogger.hpp"
|
||||
|
||||
#include <chrono>
|
||||
#include <fstream>
|
||||
#include <memory>
|
||||
#include <ostream>
|
||||
#include <stdexcept>
|
||||
|
||||
using namespace pixelarium::utils::log;
|
||||
|
||||
struct PixelariumLogger::LogStream
|
||||
{
|
||||
LogStream(const std::string& sink)
|
||||
{
|
||||
out_stream_ = std::ofstream(sink, std::ios::app);
|
||||
if (!out_stream_)
|
||||
{
|
||||
throw std::runtime_error("Failed to open log stream");
|
||||
}
|
||||
}
|
||||
|
||||
~LogStream()
|
||||
{
|
||||
if (out_stream_.is_open())
|
||||
{
|
||||
out_stream_.close();
|
||||
}
|
||||
}
|
||||
|
||||
LogStream& operator<<(const std::string& str)
|
||||
{
|
||||
this->out_stream_ << str;
|
||||
return *this;
|
||||
}
|
||||
|
||||
private:
|
||||
std::ofstream out_stream_;
|
||||
};
|
||||
|
||||
PixelariumLogger::PixelariumLogger(const std::string& name, const std::string& file_sink)
|
||||
: name_(name), file_sink_(file_sink)
|
||||
{
|
||||
log_stream_ = std::make_unique<LogStream>(file_sink_);
|
||||
}
|
||||
|
||||
PixelariumLogger::~PixelariumLogger() = default;
|
||||
|
||||
auto PixelariumLogger::Write(LogLevel lvl, const std::string& msg) const -> void
|
||||
{
|
||||
if (lvl < this->level_)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
auto now = std::chrono::system_clock::now();
|
||||
auto time_t = std::chrono::system_clock::to_time_t(now);
|
||||
std::tm tm;
|
||||
#ifdef _WIN32
|
||||
localtime_s(&tm, &time_t);
|
||||
#else
|
||||
localtime_r(&time_t, &tm);
|
||||
#endif
|
||||
|
||||
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()) % 1000;
|
||||
|
||||
auto timestamp = std::format("{:04}-{:02}-{:02} {:02}:{:02}:{:02}.{:03}", tm.tm_year + 1900, tm.tm_mon + 1,
|
||||
tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, ms.count());
|
||||
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(mutex_);
|
||||
*log_stream_ << std::format("[{}] [{}] [{}] {}\n", timestamp, name_, LogLevelToString(lvl), msg);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user