move stdout sink to seperate source files
This commit is contained in:
parent
9260acce31
commit
3d9f9139ff
|
@ -7,7 +7,9 @@ project(lucore
|
||||||
|
|
||||||
add_library(lucore
|
add_library(lucore
|
||||||
src/Assert.cpp
|
src/Assert.cpp
|
||||||
|
|
||||||
src/Logger.cpp
|
src/Logger.cpp
|
||||||
|
src/StdoutSink.cpp
|
||||||
|
|
||||||
src/OsLibrary.cpp
|
src/OsLibrary.cpp
|
||||||
src/Library.cpp
|
src/Library.cpp
|
||||||
|
|
|
@ -82,18 +82,6 @@ namespace lucore {
|
||||||
std::vector<Sink*> sinks;
|
std::vector<Sink*> sinks;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if 0
|
|
||||||
/// A logger sink implementation that prints to standard output.
|
|
||||||
struct StdoutSink : public Logger::Sink {
|
|
||||||
static StdoutSink& The();
|
|
||||||
|
|
||||||
virtual void OutputMessage(const Logger::MessageData& data) override;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/// Attach the stdout logger sink to the logger.
|
|
||||||
void LoggerAttachStdout();
|
|
||||||
|
|
||||||
template <class... Args>
|
template <class... Args>
|
||||||
void LogInfo(std::string_view format, Args... args) {
|
void LogInfo(std::string_view format, Args... args) {
|
||||||
Logger::The().Info(format, std::forward<Args>(args)...);
|
Logger::The().Info(format, std::forward<Args>(args)...);
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
#include <lucore/Logger.hpp>
|
||||||
|
|
||||||
|
namespace lucore {
|
||||||
|
|
||||||
|
/// A logger sink implementation that prints to standard output.
|
||||||
|
/// Not used by the lcpu native module, but could be used by applications
|
||||||
|
/// using lucore later on.
|
||||||
|
struct StdoutSink : public Logger::Sink {
|
||||||
|
static StdoutSink& The();
|
||||||
|
|
||||||
|
virtual void OutputMessage(const Logger::MessageData& data) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Attach the stdout logger sink to the logger.
|
||||||
|
void LoggerAttachStdout();
|
||||||
|
|
||||||
|
}
|
|
@ -31,44 +31,6 @@ namespace lucore {
|
||||||
for(auto sink : sinks)
|
for(auto sink : sinks)
|
||||||
sink->OutputMessage(data);
|
sink->OutputMessage(data);
|
||||||
}
|
}
|
||||||
#if 0
|
|
||||||
StdoutSink& StdoutSink::The() {
|
|
||||||
static StdoutSink sink;
|
|
||||||
return sink;
|
|
||||||
}
|
|
||||||
|
|
||||||
void StdoutSink::OutputMessage(const Logger::MessageData& data) {
|
|
||||||
// This is kinda iffy, but required until more standard libraries support the C++23 <print>
|
|
||||||
// header.
|
|
||||||
struct FileOutIterator {
|
|
||||||
using iterator_category = std::output_iterator_tag;
|
|
||||||
using value_type = void;
|
|
||||||
using difference_type = std::ptrdiff_t;
|
|
||||||
using pointer = void;
|
|
||||||
using reference = void;
|
|
||||||
|
|
||||||
FileOutIterator(std::FILE* file) : file(file) {}
|
|
||||||
FileOutIterator& operator*() { return *this; }
|
|
||||||
FileOutIterator& operator++() { return *this; }
|
|
||||||
FileOutIterator& operator++(int) { return *this; }
|
|
||||||
|
|
||||||
FileOutIterator& operator=(const char& val) {
|
|
||||||
fputc(val, file);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::FILE* file;
|
|
||||||
};
|
|
||||||
std::format_to(
|
|
||||||
FileOutIterator(data.severity < Logger::MessageSeverity::Error ? stdout : stderr),
|
|
||||||
"[Lucore/{}] [{}] {}\n", Logger::SeverityToString(data.severity), data.time,
|
|
||||||
std::vformat(data.format, data.args));
|
|
||||||
}
|
|
||||||
|
|
||||||
void LoggerAttachStdout() {
|
|
||||||
Logger::The().AttachSink(StdoutSink::The());
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} // namespace lucore
|
} // namespace lucore
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
#include <lucore/StdoutSink.hpp>
|
||||||
|
|
||||||
|
namespace lucore {
|
||||||
|
StdoutSink& StdoutSink::The() {
|
||||||
|
static StdoutSink sink;
|
||||||
|
return sink;
|
||||||
|
}
|
||||||
|
|
||||||
|
void StdoutSink::OutputMessage(const Logger::MessageData& data) {
|
||||||
|
// This is kinda iffy, but required until more standard libraries support the C++23 <print>
|
||||||
|
// header.
|
||||||
|
struct FputcIterator {
|
||||||
|
using iterator_category = std::output_iterator_tag;
|
||||||
|
using value_type = void;
|
||||||
|
using difference_type = std::ptrdiff_t;
|
||||||
|
using pointer = void;
|
||||||
|
using reference = void;
|
||||||
|
|
||||||
|
FputcIterator(std::FILE* file) : file(file) {}
|
||||||
|
FputcIterator& operator*() { return *this; }
|
||||||
|
FputcIterator& operator++() { return *this; }
|
||||||
|
FputcIterator& operator++(int) { return *this; }
|
||||||
|
|
||||||
|
FputcIterator& operator=(const char& val) {
|
||||||
|
fputc(val, file);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::FILE* file;
|
||||||
|
};
|
||||||
|
|
||||||
|
auto it = FputcIterator(data.severity < Logger::MessageSeverity::Error ? stdout : stderr);
|
||||||
|
std::format_to(it, "[Lucore/{}] [{}] {}\n", Logger::SeverityToString(data.severity),
|
||||||
|
data.time, std::vformat(data.format, data.args));
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoggerAttachStdout() {
|
||||||
|
Logger::The().AttachSink(StdoutSink::The());
|
||||||
|
}
|
||||||
|
} // namespace lucore
|
Loading…
Reference in New Issue