11// logger.h
22//
3- // Copyright (C) 2021, Celestia Development Team
3+ // Copyright (C) 2021-present , Celestia Development Team
44//
55// Logging functions.
66//
1111
1212#pragma once
1313
14+ #include < celcompat/filesystem.h>
15+ #include < fmt/format.h>
1416#include < iosfwd>
1517#include < string>
18+ #include < string_view>
1619
17- #include < fmt/format.h>
18-
19- #include < celcompat/filesystem.h>
20-
21- template <>
22- struct fmt ::formatter<fs::path> : formatter<std::string>
20+ template <> struct fmt ::formatter<fs::path> : formatter<std::string>
2321{
24- template <typename FormatContext>
25- auto format (const fs::path &path, FormatContext &ctx)
22+ template <typename FormatContext> auto format (const fs::path &path, FormatContext &ctx)
2623 {
27- return formatter<std::string>::format (path.string (), ctx);
24+ return formatter<std::string>::format (path.u8string (), ctx);
2825 }
2926};
3027
@@ -42,91 +39,111 @@ enum class Level
4239
4340class Logger
4441{
45- public:
42+ public:
4643 using Stream = std::basic_ostream<char >;
4744
45+ /* * Create a default logger with Info verbocity writing to std::clog and std::cerr */
4846 Logger ();
49- Logger (Level level, Stream &log, Stream &err) :
50- m_log (log),
51- m_err (err),
52- m_level (level)
53- {}
5447
55- void setLevel (Level level)
56- {
57- m_level = level;
58- }
48+ /* *
49+ * Create a logger with custom verbocity and output streams
50+ * @param level verbosibility level
51+ * @param log stream used to output normal messages
52+ * @param err stream used to output errors, warnings and debug messages
53+ */
54+ Logger (Level level, Stream &log, Stream &err);
5955
60- template <typename ... Args> inline void
61- debug (const char *format, const Args&... args) const ;
56+ /* *
57+ * Set verbocity level
58+ *
59+ * @param level verbosibility level
60+ */
61+ void setLevel (Level level);
6262
63- template <typename ... Args> inline void
64- info ( const char * format, const Args&... args) const ;
63+ template <typename ... Args>
64+ inline void debug (std::string_view format, const Args &...args) const ;
6565
66- template <typename ... Args> inline void
67- verbose ( const char * format, const Args&... args) const ;
66+ template <typename ... Args>
67+ inline void info (std::string_view format, const Args &...args) const ;
6868
69- template <typename ... Args> inline void
70- warn ( const char * format, const Args&... args) const ;
69+ template <typename ... Args>
70+ inline void verbose (std::string_view format, const Args &...args) const ;
7171
72- template <typename ... Args> inline void
73- error ( const char * format, const Args&... args) const ;
72+ template <typename ... Args>
73+ inline void warn (std::string_view format, const Args &...args) const ;
7474
75- template <typename ... Args> void
76- log (Level, const char * format, const Args&... args) const ;
75+ template <typename ... Args>
76+ inline void error (std::string_view format, const Args &...args) const ;
7777
78- static Logger* g_logger;
78+ template <typename ... Args>
79+ void log (Level, std::string_view format, const Args &...args) const ;
7980
80- private:
81- void vlog (Level level, fmt ::string_view format, fmt::format_args args) const ;
81+ private:
82+ void vlog (Level level, std ::string_view format, fmt::format_args args) const ;
8283
8384 Stream &m_log;
8485 Stream &m_err;
85- Level m_level { Level::Info } ;
86+ Level m_level;
8687};
8788
88- template <typename ... Args> void
89- Logger::log (Level level, const char * format, const Args&... args) const
89+ template <typename ... Args> void
90+ Logger::log (Level level, std::string_view format, const Args &...args) const
9091{
9192 if (level <= m_level)
92- vlog (level, fmt::string_view ( format) , fmt::make_format_args (args...));
93+ vlog (level, format, fmt::make_format_args (args...));
9394}
9495
95- template <typename ... Args> void
96- Logger::debug (const char * format, const Args&... args) const
96+ template <typename ... Args> void
97+ Logger::debug (std::string_view format, const Args &...args) const
9798{
9899 log (Level::Debug, format, args...);
99100}
100101
101- template <typename ... Args> inline void
102- Logger::info (const char * format, const Args&... args) const
102+ template <typename ... Args> inline void
103+ Logger::info (std::string_view format, const Args &...args) const
103104{
104105 log (Level::Info, format, args...);
105106}
106107
107- template <typename ... Args> inline void
108- Logger::verbose (const char * format, const Args&... args) const
108+ template <typename ... Args> inline void
109+ Logger::verbose (std::string_view format, const Args &...args) const
109110{
110111 log (Level::Verbose, format, args...);
111112}
112113
113- template <typename ... Args> inline void
114- Logger::warn (const char * format, const Args&... args) const
114+ template <typename ... Args> inline void
115+ Logger::warn (std::string_view format, const Args &...args) const
115116{
116117 log (Level::Warning, format, args...);
117118}
118119
119- template <typename ... Args> inline void
120- Logger::error (const char * format, const Args&... args) const
120+ template <typename ... Args> inline void
121+ Logger::error (std::string_view format, const Args &...args) const
121122{
122123 log (Level::Error, format, args...);
123124}
124125
125- Logger* GetLogger ();
126- Logger* CreateLogger (Level level = Level::Info);
127- Logger* CreateLogger (Level level,
128- Logger::Stream &log,
129- Logger::Stream &err);
126+ /* * Return a pointer to the default global Logger instance */
127+ Logger *GetLogger ();
128+
129+ /* *
130+ * Initiliaze the default global Logger instance writing to std::clog and std::cerr
131+ *
132+ * @param level verbosibility level
133+ * @return pointer to the default global Logger instance
134+ */
135+ Logger *CreateLogger (Level level = Level::Info);
136+
137+ /* *
138+ * Initiliaze the default global Logger instance writing to custom streams
139+ *
140+ * @param level verbosibility level
141+ * @param log stream used to output normal messages
142+ * @param err stream used to output errors, warnings and debug messages
143+ */
144+ Logger *CreateLogger (Level level, Logger::Stream &log, Logger::Stream &err);
145+
146+ /* * Destroy the default global Logger instance */
130147void DestroyLogger ();
131148
132149} // end namespace celestia::util
0 commit comments