diff --git a/Modules/Core/Common/include/otbLogger.h b/Modules/Core/Common/include/otbLogger.h index 047c225f76f77e9abddc5c6b04d7326f4494c36f..7325a9adcdfdcab7231522e77b5f184a183c7e79 100644 --- a/Modules/Core/Common/include/otbLogger.h +++ b/Modules/Core/Common/include/otbLogger.h @@ -43,14 +43,24 @@ public: typedef itk::SmartPointer< const Self > ConstPointer; itkTypeMacro(Logger, itk::Logger); - itkNewMacro(Self); + static Pointer Instance(); + + // Overwrite this to provide custom formatting of log entries virtual std::string BuildFormattedEntry(itk::Logger::PriorityLevelType, std::string const&) ITK_OVERRIDE; protected: - Logger(); - virtual ~Logger() ITK_OVERRIDE; + itkNewMacro(Self); + Logger(); + virtual ~Logger() ITK_OVERRIDE; + +private: + Logger(const Self &); //purposely not implemented + void operator =(const Self&); //purposely not implemented + + static Pointer Singleton; + }; // class Logger } // namespace otb diff --git a/Modules/Core/Common/src/otbLogger.cxx b/Modules/Core/Common/src/otbLogger.cxx index 09f08cb22efdc8fabf7bbcbc8c31d3312c53c14c..c088a2d5a0e0c9c5b5c3ae3008299044e655f81e 100644 --- a/Modules/Core/Common/src/otbLogger.cxx +++ b/Modules/Core/Common/src/otbLogger.cxx @@ -24,6 +24,17 @@ namespace otb { +Logger::Pointer Logger::Singleton = ITK_NULLPTR; + +Logger::Pointer Logger::Instance() +{ + if(!Logger::Singleton) + Logger::Singleton = Logger::New(); + + return Logger::Singleton; +} + + Logger::Logger() { #if OTB_DEBUG diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h index c6317be14289016f5a5f9636b1af864a1d0c969c..76ccd9bb5f2b46439d6b1b42c857aca82bd8b33b 100644 --- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h +++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h @@ -101,7 +101,6 @@ public: m_Name = name; GetDocExample()->SetApplicationName(name); this->Modified(); - m_Logger->SetName(name); } itkGetStringMacro(Name); @@ -709,9 +708,6 @@ public: otb::Logger* GetLogger() const; - /** Sets the logger instance of the application (use with caution) */ - void SetLogger(otb::Logger *logger); - itk::ProcessObject* GetProgressSource() const; std::string GetProgressDescription() const; @@ -984,7 +980,6 @@ private: std::string m_Name; std::string m_Description; ParameterGroup::Pointer m_ParameterList; - otb::Logger::Pointer m_Logger; itk::ProcessObject::Pointer m_ProgressSource; std::string m_ProgressSourceDescription; diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx index cca32d50d38ee1b3c8bb056854863e49179a493b..4a7804d527a3cad12263df988fa1c84bc9a67dfc 100644 --- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx +++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx @@ -46,6 +46,7 @@ #include <exception> #include "itkMacro.h" + namespace otb { namespace Wrapper @@ -54,7 +55,6 @@ namespace Wrapper Application::Application() : m_Name(""), m_Description(""), - m_Logger(otb::Logger::New()), m_ProgressSourceDescription(""), m_DocName(""), m_DocLongDescription(""), @@ -66,10 +66,7 @@ Application::Application() m_HaveInXML(true), m_HaveOutXML(true), m_IsInXMLParsed(false) -{ - // Don't call Init from the constructor, since it calls a virtual method ! - m_Logger->SetName("Application.logger"); -} +{} Application::~Application() { @@ -77,15 +74,7 @@ Application::~Application() otb::Logger* Application::GetLogger() const { - return m_Logger; -} - -void Application::SetLogger(otb::Logger *logger) -{ - if (m_Logger != logger) - { - m_Logger = logger; - } + return otb::Logger::Instance(); } std::vector<std::string> diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperCompositeApplication.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperCompositeApplication.cxx index db216594f54992949895a4158aadc5e3137f15eb..7ebfa4d59ad00a6726b0fdabeab96b6e4fcb49fe 100644 --- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperCompositeApplication.cxx +++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperCompositeApplication.cxx @@ -62,8 +62,6 @@ CompositeApplication InternalApplication container; container.App = ApplicationRegistry::CreateApplication(appType); container.Desc = desc; - // Setup logger - container.App->SetLogger(this->GetLogger()); container.App->AddObserver(AddProcessToWatchEvent(), m_AddProcessCommand.GetPointer()); m_AppContainer[key] = container; return true;