PLCnext API Documentation 24.0.0.71
LogAdapter.hpp
1
2//
3// Copyright PHOENIX CONTACT Electronics GmbH
4//
6#pragma once
8#include "Arp/System/Commons/Diagnostics/Logging/LogLevel.hpp"
9#include "Arp/System/Commons/Diagnostics/Logging/LogStream.hpp"
10#include <memory>
11#include <sstream>
12
13// forwards
14namespace log4cplus
15{
16class Logger;
17}
18
19namespace Arp { namespace System { namespace Commons { namespace Diagnostics { namespace Logging
20{
21
22// forwards
23class Log;
24class LogManager;
25class LoggerBase;
26
27}}}}} // end of namesapce Arp::System::Commons::Diagnostics::Logging
28
29
30namespace Arp { namespace System { namespace Commons { namespace Diagnostics { namespace Logging { namespace Internal
31{
32
36class LogAdapter
37{
41
42public: // typedefs
43 typedef std::shared_ptr<LogAdapter> Ptr;
44 typedef log4cplus::Logger InternalLogger;
45 typedef std::shared_ptr<InternalLogger> InternalLoggerPtr;
46
47public: // construction/destruction
48 LogAdapter(void);
49 LogAdapter(LogAdapter&& arg)noexcept;
50 ~LogAdapter(void) = default;
51
52public: // operators
53 LogAdapter& operator=(LogAdapter&& arg)noexcept;
54
55public: // properties
56 void SetLogLevel(LogLevel value);
57 LogLevel GetLogLevel(void);
58 const std::string& GetLoggerName(void);
59
60public: // operations
61 void Log(LogLevel messageSeverity, const std::string& message);
62
63private: // methods
64 LogAdapter(InternalLogger& internalLogger);
65 LogAdapter(InternalLogger&& internalLogger);
66
67 bool IsInitialized(void);
68 void Initialize(InternalLogger& internalLogger);
69 void Initialize(InternalLogger&& internalLogger);
70 LogStream GetLogStream(LogLevel logLevel);
71
72private: // static methods
73 static LogManager* GetLogManager(void);
74
75
76private: // deleted methods
77 LogAdapter(const LogAdapter& arg) = delete;
78 LogAdapter& operator=(const LogAdapter& arg) = delete;
79
80private: // fields
81 LogLevel logLevel; // store this here just for performance pupose
82 InternalLoggerPtr internalLoggerPtr;
83 std::stringstream logStreamBuffer;
84
85private: // static fields // TODO:SDK: make this non static
86};
87
89// inline methods of class LogAdapter
90inline LogAdapter::LogAdapter()
91 : logLevel(LogLevel::Default)
92 , internalLoggerPtr()
93 , logStreamBuffer()
94{
95}
96
97inline LogAdapter::LogAdapter(LogAdapter&& arg)noexcept
98 : logLevel(arg.logLevel)
99 , internalLoggerPtr(arg.internalLoggerPtr)
100 , logStreamBuffer()
101{
102}
103
104inline LogAdapter& LogAdapter::operator=(LogAdapter&& arg)noexcept
105{
106 this->logLevel = arg.logLevel;
107 this->internalLoggerPtr = arg.internalLoggerPtr;
108 //todo use of deleted function ‘std::basic_stringstream<char>& std::basic_stringstream<char>::operator=(const std::basic_stringstream<char>&)’
109 //this->logStreamBuffer = std::forward<std::stringstream>(arg.logStreamBuffer);
110 return *this;
111};
112
113inline bool LogAdapter::IsInitialized()
114{
115 return (this->internalLoggerPtr != nullptr);
116}
117
118inline LogStream LogAdapter::GetLogStream(LogLevel streamLogLevel)
119{
120 return LogStream(streamLogLevel, this->logStreamBuffer, this);
121}
122
123}}}}}} // end of namesapce Arp::System::Commons::Diagnostics::Logging::Internal
Root namespace for the PLCnext API