diff options
Diffstat (limited to 'src/logger')
-rw-r--r-- | src/logger/journal.cpp | 11 | ||||
-rw-r--r-- | src/logger/journal.hpp | 17 | ||||
-rw-r--r-- | src/logger/logger_set.cpp | 45 | ||||
-rw-r--r-- | src/logger/logger_set.hpp | 25 | ||||
-rw-r--r-- | src/logger/phosphor.cpp | 13 | ||||
-rw-r--r-- | src/logger/phosphor.hpp | 16 | ||||
-rw-r--r-- | src/logger/types/ilogger.hpp | 16 |
7 files changed, 143 insertions, 0 deletions
diff --git a/src/logger/journal.cpp b/src/logger/journal.cpp new file mode 100644 index 0000000..ba002b0 --- /dev/null +++ b/src/logger/journal.cpp @@ -0,0 +1,11 @@ +#include <iostream> + +#include "journal.hpp" + +namespace smtp::logger +{ + void Journal::LogError( std::string const& method, std::string const& message ) const + { + std::cout << message << std::endl; + } +}
\ No newline at end of file diff --git a/src/logger/journal.hpp b/src/logger/journal.hpp new file mode 100644 index 0000000..0f1e6bb --- /dev/null +++ b/src/logger/journal.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include "types/ilogger.hpp" + +namespace smtp::logger +{ + class Journal + : public types::ILogger + { + public: + Journal() = default; + ~Journal() override = default; + + void LogError( std::string const& method, std::string const& message ) const override; + }; +} + diff --git a/src/logger/logger_set.cpp b/src/logger/logger_set.cpp new file mode 100644 index 0000000..d5d45a0 --- /dev/null +++ b/src/logger/logger_set.cpp @@ -0,0 +1,45 @@ +#include "logger_set.hpp" +#include "journal.hpp" +#include "phosphor.hpp" +#include <iostream> +namespace smtp::logger +{ + std::shared_ptr < LoggerSet > LoggerSet::mInstance = nullptr; + + LoggerSet::LoggerSet( std::list < types::ILoggerPtr > const& logger ) + : mLogger( logger ) + { + + } + + std::shared_ptr < LoggerSet > LoggerSet::GetInstance() + { + if( !mInstance ) + { + BuildLogger(); + } + return mInstance; + } + + void LoggerSet::BuildLogger() + { + std::list < types::ILoggerPtr > loggers; +#ifdef ADD_JOURNAL_LOGGING + loggers.push_back( std::make_shared < Journal >()); +#endif +#ifdef ADD_PHOSPHOR_LOGGING + loggers.push_back( std::make_shared < Phosphor >()); +#endif + mInstance.reset( new LoggerSet( loggers )); + } + + void LoggerSet::LogError( std::string const& method, std::string const& message ) + { + for( const auto& logger: mLogger ) + { + logger->LogError( method, message ); + } + } + + +} diff --git a/src/logger/logger_set.hpp b/src/logger/logger_set.hpp new file mode 100644 index 0000000..e482042 --- /dev/null +++ b/src/logger/logger_set.hpp @@ -0,0 +1,25 @@ +#pragma once + +#include <string> +#include <list> + +#include "types/ilogger.hpp" + +namespace smtp::logger +{ + class LoggerSet + { + private: + explicit LoggerSet( std::list < types::ILoggerPtr > const& logger ); + static void BuildLogger(); + + static std::shared_ptr < LoggerSet > mInstance; + std::list < types::ILoggerPtr > mLogger; + public: + LoggerSet( const LoggerSet& ) = delete; + LoggerSet& operator=( LoggerSet& ) = delete; + + void LogError( std::string const& method, std::string const& message ); + static std::shared_ptr < LoggerSet > GetInstance(); + }; +} diff --git a/src/logger/phosphor.cpp b/src/logger/phosphor.cpp new file mode 100644 index 0000000..f3575c4 --- /dev/null +++ b/src/logger/phosphor.cpp @@ -0,0 +1,13 @@ +#include <phosphor-logging/lg2.hpp> + +#include "phosphor.hpp" + +namespace smtp::logger +{ + void Phosphor::LogError( std::string const& method, std::string const& message ) const + { + auto join_message = method + ',' + message; + const auto* msg = "OpenBMC.0.1.SMTPError"; + lg2::error("SMTP error", "REDFISH_MESSAGE_ID", msg, "REDFISH_MESSAGE_ARGS", join_message); + } +}
\ No newline at end of file diff --git a/src/logger/phosphor.hpp b/src/logger/phosphor.hpp new file mode 100644 index 0000000..f40ddf2 --- /dev/null +++ b/src/logger/phosphor.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "types/ilogger.hpp" + +namespace smtp::logger +{ + class Phosphor + : public types::ILogger + { + public: + Phosphor() = default; + ~Phosphor() override = default; + + void LogError( std::string const& method, std::string const& message ) const override; + }; +} diff --git a/src/logger/types/ilogger.hpp b/src/logger/types/ilogger.hpp new file mode 100644 index 0000000..5dce1d5 --- /dev/null +++ b/src/logger/types/ilogger.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include <memory> + +namespace smtp::logger::types +{ + class ILogger + { + public: + virtual ~ILogger() = default; + + virtual void LogError( std::string const& method, std::string const& message ) const = 0; + }; + + using ILoggerPtr = std::shared_ptr < ILogger >; +}
\ No newline at end of file |