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