summaryrefslogtreecommitdiff
path: root/asl/log
diff options
context:
space:
mode:
authorSteven Le Rouzic <steven.lerouzic@gmail.com>2025-02-12 23:34:47 +0100
committerSteven Le Rouzic <steven.lerouzic@gmail.com>2025-02-12 23:34:47 +0100
commitcb77cbe9ce4cddad6a460aa190ff70f0c13e4703 (patch)
treeeb63a44f6264893ba803ff27db2faa59d644b0e9 /asl/log
parente297b4182b735d97d5251361854acd2fccb03013 (diff)
Rename log to logging
Diffstat (limited to 'asl/log')
-rw-r--r--asl/log/BUILD.bazel26
-rw-r--r--asl/log/log.cpp52
-rw-r--r--asl/log/log.hpp98
-rw-r--r--asl/log/log_tests.cpp23
4 files changed, 0 insertions, 199 deletions
diff --git a/asl/log/BUILD.bazel b/asl/log/BUILD.bazel
deleted file mode 100644
index 51f41df..0000000
--- a/asl/log/BUILD.bazel
+++ /dev/null
@@ -1,26 +0,0 @@
-cc_library(
- name = "log",
- srcs = [
- "log.cpp",
- ],
- hdrs = [
- "log.hpp",
- ],
- deps = [
- "//asl",
- ],
- visibility = ["//visibility:public"],
-)
-
-cc_test(
- name = "tests",
- srcs = [
- "log_tests.cpp"
- ],
- deps = [
- ":log",
- "//asl/testing",
- ],
- visibility = ["//visibility:public"],
-)
-
diff --git a/asl/log/log.cpp b/asl/log/log.cpp
deleted file mode 100644
index af31a84..0000000
--- a/asl/log/log.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-#include "asl/log/log.hpp"
-#include "asl/print.hpp"
-#include "asl/string_builder.hpp"
-
-// @Todo Don't use internal get_stdout_writer, make console module
-
-static asl::log::DefaultLogger<asl::Writer*> g_default_logger{asl::print_internals::get_stdout_writer()};
-static asl::log::Logger* g_head = &g_default_logger;
-
-static constexpr asl::string_view kLevelName[] = {
- " DEBUG ",
- " INFO ",
- " WARNING ",
- " ERROR ",
-};
-
-void asl::log::register_logger(box<Logger> logger_box)
-{
- auto* logger = leak(ASL_MOVE(logger_box));
- logger->m_next = exchange(g_head, logger);
-}
-
-void asl::log::DefaultLoggerBase::log_inner(Writer& writer, const message& msg)
-{
- asl::format(&writer, "[{}] {}:{}: {}\n",
- kLevelName[msg.level], // NOLINT
- msg.location.file,
- msg.location.line,
- msg.message);
-}
-
-void asl::log::log_inner(
- level l,
- string_view fmt, span<const format_internals::type_erased_arg> args,
- const source_location& sl)
-{
- // @Todo Use temporary allocator
- StringWriter msg_writer{};
- asl::format_internals::format(&msg_writer, fmt, args);
-
- message m{
- .level = l,
- .message = msg_writer.as_string_view(),
- .location = sl,
- };
-
- for (auto* it = g_head; it != nullptr; it = it->next_logger())
- {
- it->log(m);
- }
-}
-
diff --git a/asl/log/log.hpp b/asl/log/log.hpp
deleted file mode 100644
index 81f10e7..0000000
--- a/asl/log/log.hpp
+++ /dev/null
@@ -1,98 +0,0 @@
-#pragma once
-
-#include "asl/format.hpp"
-#include "asl/utility.hpp"
-#include "asl/box.hpp"
-
-namespace asl::log
-{
-
-enum level : uint8_t
-{
- kDebug = 0,
- kInfo,
- kWarning,
- kError,
-};
-
-struct message
-{
- level level;
- string_view message;
- source_location location;
-};
-
-// @Todo Write and use an intrusive doubly-linked list
-class Logger
-{
- Logger* m_next{};
-
-public:
- Logger() = default;
- ASL_DEFAULT_COPY_MOVE(Logger);
- virtual ~Logger() = default;
-
- virtual void log(const message&) = 0;
-
- friend void register_logger(box<Logger>);
-
- constexpr Logger* next_logger() const { return m_next; }
-};
-
-class DefaultLoggerBase : public Logger
-{
-protected:
- static void log_inner(Writer&, const message&);
-};
-
-template<derefs_as<Writer> W>
-class DefaultLogger : public DefaultLoggerBase
-{
- W m_writer;
-
-public:
- explicit constexpr DefaultLogger(W&& writer) : m_writer{ASL_FWD(writer)} {}
-
- constexpr void log(const message& m) override
- {
- log_inner(deref<Writer>(m_writer), m);
- }
-};
-
-void register_logger(box<Logger>);
-
-// @Todo Add a way to remove loggers (including all)
-
-template<typename T, typename... Args>
-requires constructible_from<T, Args&&...> && convertible_from<Logger*, T*>
-void register_logger(Args&&... args)
-{
- register_logger(make_box<T>(ASL_FWD(args)...));
-}
-
-void log_inner(level l, string_view fmt, span<const format_internals::type_erased_arg> args, const source_location& sl);
-
-template<formattable... Args>
-void log(level l, const source_location& sl, string_view fmt, const Args&... args)
-{
- if constexpr (sizeof...(Args) == 0)
- {
- log_inner(l, fmt, {}, sl);
- }
- else
- {
- format_internals::type_erased_arg type_erased_args[] = {
- format_internals::type_erased_arg(args)...
- };
- log_inner(l, fmt, type_erased_args, sl);
- }
-}
-
-} // namespace asl::log
-
-// @Todo Compile-time configuration of logging
-
-#define ASL_LOG_DEBUG(...) ::asl::log::log(::asl::log::kDebug, ::asl::source_location{}, __VA_ARGS__)
-#define ASL_LOG_INFO(...) ::asl::log::log(::asl::log::kInfo, ::asl::source_location{}, __VA_ARGS__)
-#define ASL_LOG_WARNING(...) ::asl::log::log(::asl::log::kWarning, ::asl::source_location{}, __VA_ARGS__)
-#define ASL_LOG_ERROR(...) ::asl::log::log(::asl::log::kError, ::asl::source_location{}, __VA_ARGS__)
diff --git a/asl/log/log_tests.cpp b/asl/log/log_tests.cpp
deleted file mode 100644
index b174fd3..0000000
--- a/asl/log/log_tests.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "asl/log/log.hpp"
-#include "asl/testing/testing.hpp"
-#include "asl/string_builder.hpp"
-
-ASL_TEST(log)
-{
- asl::log::log(asl::log::kInfo, asl::source_location{}, "Hello, {}!", "world"_sv);
-
- ASL_LOG_ERROR("Oh no! {}", 42);
-}
-
-static asl::StringWriter g_string_writer{};
-
-ASL_TEST(custom_writer)
-{
- asl::log::register_logger<asl::log::DefaultLogger<asl::StringWriter<>&>>(g_string_writer);
-
- ASL_LOG_INFO("Hello");
- auto sv = g_string_writer.as_string_view();
-
- ASL_TEST_EXPECT(sv == "[ INFO ] asl/log/log_tests.cpp:18: Hello\n");
-}
-