CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
Logging.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
11
16
17#if __has_include(<spdlog/logger.h>)
18#define CE_HAS_LOGGING 1
19#endif
20
21#if defined(CE_HAS_LOGGING)
22#include <spdlog/logger.h>
23#include <spdlog/sinks/base_sink.h>
24
25#include <fmt/ostream.h>
26
27namespace CeresEngine {
28
29 class Logger final {
30 private:
32 mutable spdlog::logger logger;
33
34 public:
37 Logger(const char* name) noexcept; // NOLINT(google-explicit-constructor,hicpp-explicit-conversions)
38
41 Logger(const String& name) noexcept; // NOLINT(google-explicit-constructor,hicpp-explicit-conversions)
42
43 public:
48 template<typename... Args> void trace(fmt::format_string<Args...> fmt, const Args&... args) const {
49#if !defined(CE_LOGGER_NO_TRACE)
50 logger.trace(fmt, args...);
51#endif
52 }
53
58 template<typename... Args> void debug(fmt::format_string<Args...> fmt, const Args&... args) const {
59#if !defined(CE_LOGGER_NO_DEBUG)
60 logger.debug(fmt, args...);
61#endif
62 }
63
68 template<typename... Args> void info(fmt::format_string<Args...> fmt, const Args&... args) const { logger.info(fmt, args...); }
69
74 template<typename... Args> void warn(fmt::format_string<Args...> fmt, const Args&... args) const { logger.warn(fmt, args...); }
75
80 template<typename... Args> void error(fmt::format_string<Args...> fmt, const Args&... args) const { logger.error(fmt, args...); }
81
86 template<typename... Args> void critical(fmt::format_string<Args...> fmt, const Args&... args) const { logger.critical(fmt, args...); }
87
93 template<typename... Args> void log(spdlog::level::level_enum level, fmt::format_string<Args...> fmt, const Args&... args) const {
94 logger.log(level, fmt, args...);
95 }
96
98 void setLevel(const spdlog::level::level_enum level) const { logger.set_level(level); }
99
100 void flush() const { logger.flush(); }
101 };
102
104 extern const Logger& gDefaultLogger();
105
110 template<typename... Args> void trace(fmt::format_string<Args...> fmt, const Args&... args) { gDefaultLogger().trace(fmt, args...); }
111
116 template<typename... Args> void debug(fmt::format_string<Args...> fmt, const Args&... args) { gDefaultLogger().debug(fmt, args...); }
117
122 template<typename... Args> constexpr void info(fmt::format_string<Args...> fmt, const Args&... args) { gDefaultLogger().info(fmt, args...); }
123
128 template<typename... Args> void warn(fmt::format_string<Args...> fmt, const Args&... args) { gDefaultLogger().warn(fmt, args...); }
129
134 template<typename... Args> void error(fmt::format_string<Args...> fmt, const Args&... args) { gDefaultLogger().error(fmt, args...); }
135
140 template<typename... Args> void critical(fmt::format_string<Args...> fmt, const Args&... args) { gDefaultLogger().critical(fmt, args...); }
141
142 class BufferedSink : public spdlog::sinks::base_sink<Mutex> {
143 private:
145
146 public:
147 BufferedSink(); // NOLINT(google-explicit-constructor)
148
149 public:
151
152 protected:
154 void sink_it_(const spdlog::details::log_msg& msg) final;
155
157 void flush_() final;
158 };
159
162
163} // namespace CeresEngine
164
165
166//template <typename T> requires (fmt::detail::is_streamable<T, char>::value) struct fmt::formatter<T> : fmt::ostream_formatter {};
167
168#endif
Definition Application.hpp:19
std::shared_ptr< T > SPtr
SPtr is a smart pointer that retains shared ownership of an object through a pointer.
Definition SmartPtr.hpp:37
BasicString< char > String
Narrow string used for handling narrow encoded text in UTF-8.
Definition String.hpp:163
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25