wren
Vulkan-based game engine
Loading...
Searching...
No Matches
log.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <boost/describe.hpp>
4#include <format>
5#include <iostream>
6#include <print>
7
8#include "ansi.hpp"
10#include "wren/utils/format.hpp" // IWYU pragma: export
11
12namespace wren::log {
13
22
23BOOST_DESCRIBE_ENUM(LogLevel, Trace, Debug, Info, Warn, Error, Fatal)
24
25static auto get_log_level() {
26 static std::optional<LogLevel> level = std::nullopt;
27 if (!level.has_value()) {
28 if (getenv("WREN_LOG_LEVEL") != nullptr) {
29 const auto l_opt =
30 utils::string_to_enum<LogLevel>(getenv("WREN_LOG_LEVEL"), true);
31 if (l_opt) level = l_opt.value_or(LogLevel::Info);
32 } else {
33 level = LogLevel::Info;
34 }
35 }
36
37 return level.value();
38}
39
40template <typename... Args>
41void trace(const std::format_string<Args...>& fmt, Args&&... args) {
43 std::println(std::cout, "{}[trace]{} {}", ansi::kGrey, ansi::kReset,
44 std::format(fmt, std::forward<Args>(args)...));
45 }
46}
47
48template <typename... Args>
49void debug(const std::format_string<Args...>& fmt, Args&&... args) {
51 std::println(std::cout, "{}[debug]{} {}", ansi::kBlue, ansi::kReset,
52 std::format(fmt, std::forward<Args>(args)...));
53 }
54}
55
56template <typename... Args>
57void info(const std::format_string<Args...>& fmt, Args&&... args) {
59 std::println(std::cout, "{}[info]{} {}", ansi::kGreen, ansi::kReset,
60 std::format(fmt, std::forward<Args>(args)...));
61 }
62}
63
64template <typename... Args>
65void warn(const std::format_string<Args...>& fmt, Args&&... args) {
67 std::println(std::cout, "{}[warn]{} {}", ansi::kOrange, ansi::kReset,
68 std::format(fmt, std::forward<Args>(args)...));
69 }
70}
71
72template <typename... Args>
73void error(const std::format_string<Args...>& fmt, Args&&... args) {
75 std::println(std::cerr, "{}[error]{} {}", ansi::kRed, ansi::kReset,
76 std::format(fmt, std::forward<Args>(args)...));
77 }
78}
79
80template <typename... Args>
81void fatal(const std::format_string<Args...>& fmt, Args&&... args) {
83 std::print(std::cerr, "{}[fatal]{} {}", ansi::kRed, ansi::kReset,
84 std::format(fmt, std::forward<Args>(args)...));
85 }
86 std::terminate();
87}
88
89} // namespace wren::log
constexpr auto kBlue
Definition ansi.hpp:33
constexpr auto kGrey
Definition ansi.hpp:32
constexpr auto kReset
Definition ansi.hpp:29
constexpr auto kGreen
Definition ansi.hpp:34
constexpr auto kOrange
Definition ansi.hpp:30
constexpr auto kRed
Definition ansi.hpp:31
Definition log.hpp:12
static auto get_log_level()
Definition log.hpp:25
void trace(const std::format_string< Args... > &fmt, Args &&... args)
Definition log.hpp:41
void error(const std::format_string< Args... > &fmt, Args &&... args)
Definition log.hpp:73
void warn(const std::format_string< Args... > &fmt, Args &&... args)
Definition log.hpp:65
void debug(const std::format_string< Args... > &fmt, Args &&... args)
Definition log.hpp:49
void info(const std::format_string< Args... > &fmt, Args &&... args)
Definition log.hpp:57
void fatal(const std::format_string< Args... > &fmt, Args &&... args)
Definition log.hpp:81
LogLevel
Definition log.hpp:14
@ Info
Definition log.hpp:17
@ Warn
Definition log.hpp:18
@ Fatal
Definition log.hpp:20
@ Error
Definition log.hpp:19
@ Debug
Definition log.hpp:16
@ Trace
Definition log.hpp:15