cpp-demo-project/include/plog/Logger.h

85 lines
2 KiB
C
Raw Permalink Normal View History

2024-01-22 12:05:59 +01:00
#pragma once
#include <plog/Appenders/IAppender.h>
#include <plog/Util.h>
#include <vector>
#ifdef PLOG_DEFAULT_INSTANCE // for backward compatibility
# define PLOG_DEFAULT_INSTANCE_ID PLOG_DEFAULT_INSTANCE
#endif
#ifndef PLOG_DEFAULT_INSTANCE_ID
# define PLOG_DEFAULT_INSTANCE_ID 0
#endif
namespace plog
{
template<int instanceId>
class PLOG_LINKAGE Logger : public util::Singleton<Logger<instanceId> >, public IAppender
{
public:
Logger(Severity maxSeverity = none) : m_maxSeverity(maxSeverity)
{
}
Logger& addAppender(IAppender* appender)
{
assert(appender != this);
m_appenders.push_back(appender);
return *this;
}
Severity getMaxSeverity() const
{
return m_maxSeverity;
}
void setMaxSeverity(Severity severity)
{
m_maxSeverity = severity;
}
bool checkSeverity(Severity severity) const
{
return severity <= m_maxSeverity;
}
virtual void write(const Record& record) PLOG_OVERRIDE
{
if (checkSeverity(record.getSeverity()))
{
*this += record;
}
}
void operator+=(const Record& record)
{
for (std::vector<IAppender*>::iterator it = m_appenders.begin(); it != m_appenders.end(); ++it)
{
(*it)->write(record);
}
}
private:
Severity m_maxSeverity;
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable:4251) // needs to have dll-interface to be used by clients of class
#endif
std::vector<IAppender*> m_appenders;
#ifdef _MSC_VER
# pragma warning(pop)
#endif
};
template<int instanceId>
inline Logger<instanceId>* get()
{
return Logger<instanceId>::getInstance();
}
inline Logger<PLOG_DEFAULT_INSTANCE_ID>* get()
{
return Logger<PLOG_DEFAULT_INSTANCE_ID>::getInstance();
}
}