1 #pragma once
2 #include <plog/Appenders/IAppender.h>
3 #include <plog/Util.h>
4 #include <vector>
5 
6 #ifdef PLOG_DEFAULT_INSTANCE // for backward compatibility
7 #   define PLOG_DEFAULT_INSTANCE_ID PLOG_DEFAULT_INSTANCE
8 #endif
9 
10 #ifndef PLOG_DEFAULT_INSTANCE_ID
11 #   define PLOG_DEFAULT_INSTANCE_ID 0
12 #endif
13 
14 namespace plog
15 {
16     template<int instanceId>
17     class Logger : public util::Singleton<Logger<instanceId> >, public IAppender
18     {
19     public:
m_maxSeverity(maxSeverity)20         Logger(Severity maxSeverity = none) : m_maxSeverity(maxSeverity)
21         {
22         }
23 
addAppender(IAppender * appender)24         Logger& addAppender(IAppender* appender)
25         {
26             assert(appender != this);
27             m_appenders.push_back(appender);
28             return *this;
29         }
30 
getMaxSeverity()31         Severity getMaxSeverity() const
32         {
33             return m_maxSeverity;
34         }
35 
setMaxSeverity(Severity severity)36         void setMaxSeverity(Severity severity)
37         {
38             m_maxSeverity = severity;
39         }
40 
checkSeverity(Severity severity)41         bool checkSeverity(Severity severity) const
42         {
43             return severity <= m_maxSeverity;
44         }
45 
write(const Record & record)46         virtual void write(const Record& record)
47         {
48             if (checkSeverity(record.getSeverity()))
49             {
50                 *this += record;
51             }
52         }
53 
54         void operator+=(const Record& record)
55         {
56             for (std::vector<IAppender*>::iterator it = m_appenders.begin(); it != m_appenders.end(); ++it)
57             {
58                 (*it)->write(record);
59             }
60         }
61 
62     private:
63         Severity m_maxSeverity;
64         std::vector<IAppender*> m_appenders;
65     };
66 
67     template<int instanceId>
get()68     inline Logger<instanceId>* get()
69     {
70         return Logger<instanceId>::getInstance();
71     }
72 
get()73     inline Logger<PLOG_DEFAULT_INSTANCE_ID>* get()
74     {
75         return Logger<PLOG_DEFAULT_INSTANCE_ID>::getInstance();
76     }
77 }
78