]> git.stg.codes - stg.git/blob - libs/logger/include/stg/logger.h
Fight Optional
[stg.git] / libs / logger / include / stg / logger.h
1 #pragma once
2
3 #include <string>
4 #include <mutex>
5
6 namespace STG
7 {
8
9 class Logger
10 {
11     public:
12         void setFileName(const std::string& fn);
13         void operator()(const char * fmt, ...) const;
14         void operator()(const std::string & line) const { logString(line.c_str()); }
15
16         static Logger& get();
17
18     private:
19         const char* logDate(time_t t) const;
20         void logString(const char* str) const;
21
22         mutable std::mutex mutex;
23         std::string fileName;
24 };
25 //-----------------------------------------------------------------------------
26 class PluginLogger
27 {
28     public:
29         static PluginLogger get(std::string pluginName)
30         {
31             return PluginLogger(std::move(pluginName));
32         }
33
34         PluginLogger(PluginLogger&& rhs)
35             : m_parent(Logger::get()),
36               m_pluginName(std::move(rhs.m_pluginName))
37         {}
38         PluginLogger& operator=(PluginLogger&& rhs)
39         {
40             std::lock_guard<std::mutex> lock(m_mutex);
41             m_pluginName = std::move(rhs.m_pluginName);
42             return *this;
43         }
44
45         void operator()(const char* fmt, ...) const;
46         void operator()(const std::string& line) const;
47
48     private:
49         explicit PluginLogger(std::string pn)
50             : m_parent(Logger::get()),
51               m_pluginName(std::move(pn))
52         {}
53
54         mutable std::mutex m_mutex;
55         Logger& m_parent;
56         std::string m_pluginName;
57 };
58
59 }