Skip to content

Commit

Permalink
Unify treatment of Logger instance
Browse files Browse the repository at this point in the history
  • Loading branch information
rfranke committed Nov 26, 2016
1 parent 6b059e0 commit 01ca4a3
Show file tree
Hide file tree
Showing 10 changed files with 74 additions and 69 deletions.
22 changes: 10 additions & 12 deletions SimulationRuntime/cpp/Core/Utils/extension/logger.cpp
Expand Up @@ -9,14 +9,15 @@
#include <Core/Utils/extension/FactoryExport.h>
#include <Core/Utils/extension/logger.hpp>

Logger* Logger::instance = NULL;
Logger* Logger::_instance = NULL;

Logger::Logger(LogSettings settings, bool enabled) : _settings(settings), _isEnabled(enabled)
{
}

Logger::Logger(bool enabled) : _settings(LogSettings()), _isEnabled(enabled)
Logger::Logger(LogSettings settings, bool enabled)
: _logSettings(settings)
, _isEnabled(enabled)
{
if (_instance != NULL)
delete _instance;
_instance = NULL;
}

Logger::~Logger()
Expand All @@ -25,15 +26,12 @@ Logger::~Logger()

void Logger::initialize(LogSettings settings)
{
if (instance != NULL)
delete instance;

switch (settings.format) {
case LF_XML:
instance = new LoggerXML(settings, true);
case LF_TXT:
_instance = new Logger(settings, true);
break;
default:
instance = new Logger(settings, true);
_instance = new LoggerXML(settings, true);
}
}

Expand Down
4 changes: 2 additions & 2 deletions SimulationRuntime/cpp/FMU/FMULogger.cpp
Expand Up @@ -11,10 +11,10 @@
#include <FMU/FMULogger.h>
/*
#if defined(_MSC_VER) && !defined(RUNTIME_STATIC_LINKING)
Logger* Logger::instance = 0;
Logger* Logger::_instance = 0;
#endif
*/
FMULogger::FMULogger(fmiCallbackLogger callbackLogger, fmiComponent component, fmiString instanceName) : Logger(false),
FMULogger::FMULogger(fmiCallbackLogger callbackLogger, fmiComponent component, fmiString instanceName) : Logger(LogSettings(LF_FMI), false),
callbackLogger(callbackLogger), component(component), instanceName(instanceName)
{
}
Expand Down
Expand Up @@ -27,7 +27,7 @@ using std::string;

enum LogCategory {LC_INIT = 0, LC_NLS = 1, LC_LS = 2, LC_SOLVER = 3, LC_OUTPUT = 4, LC_EVENTS = 5, LC_OTHER = 6, LC_MODEL = 7};
enum LogLevel {LL_ERROR = 0, LL_WARNING = 1, LL_INFO = 2, LL_DEBUG = 3};
enum LogFormat {LF_TXT = 0, LF_XML = 1};
enum LogFormat {LF_TXT = 0, LF_FMI = 1, LF_FMI2 = 2, LF_XML = 3, LF_XMLTCP = 4};
enum LogOMEdit {LOG_EVENTS = 0, LOG_INIT, LOG_LS, LOG_NLS, LOG_SOLVER, LOG_STATS};
enum OutputPointType {OPT_ALL, OPT_STEP, OPT_NONE};
enum OutputFormat {CSV, MAT, BUFFER, EMPTY};
Expand All @@ -38,10 +38,10 @@ struct LogSettings
std::vector<LogLevel> modes;
LogFormat format;

LogSettings()
LogSettings(LogFormat fmt = LF_TXT)
{
modes = std::vector<LogLevel>(8, LL_ERROR);
format = LF_TXT;
format = fmt;
}

void setAll(LogLevel l)
Expand Down
32 changes: 14 additions & 18 deletions SimulationRuntime/cpp/Include/Core/Utils/extension/logger.hpp
Expand Up @@ -36,10 +36,10 @@ class BOOST_EXTENSION_LOGGER_DECL Logger

static Logger* getInstance()
{
if (instance == NULL)
if (_instance == NULL)
initialize(LogSettings());

return instance;
return _instance;
}

static void initialize(LogSettings settings);
Expand All @@ -51,20 +51,20 @@ class BOOST_EXTENSION_LOGGER_DECL Logger

static inline void write(std::string msg, LogCategory cat, LogLevel lvl)
{
if (instance && instance->isSet(cat, lvl))
instance->writeInternal(msg, cat, lvl, LS_NONE);
if (_instance && _instance->isSet(cat, lvl))
_instance->writeInternal(msg, cat, lvl, LS_NONE);
}

static inline void writeBegin(std::string msg, LogCategory cat, LogLevel lvl)
{
if (instance && instance->isSet(cat, lvl))
instance->writeInternal(msg, cat, lvl, LS_BEGIN);
if (_instance && _instance->isSet(cat, lvl))
_instance->writeInternal(msg, cat, lvl, LS_BEGIN);
}

static inline void writeEnd(LogCategory cat, LogLevel lvl)
{
if (instance && instance->isSet(cat, lvl))
instance->writeInternal("", cat, lvl, LS_END);
if (_instance && _instance->isSet(cat, lvl))
_instance->writeInternal("", cat, lvl, LS_END);
}

static inline void write(std::string msg, std::pair<LogCategory,LogLevel> mode)
Expand Down Expand Up @@ -92,7 +92,7 @@ class BOOST_EXTENSION_LOGGER_DECL Logger

static bool isEnabled()
{
return instance != NULL && instance->isEnabledInternal();
return _instance != NULL && _instance->isEnabledInternal();
}

static std::pair<LogCategory,LogLevel> getLogMode(LogCategory cat, LogLevel lvl)
Expand All @@ -102,17 +102,17 @@ class BOOST_EXTENSION_LOGGER_DECL Logger

void setAll(LogLevel lvl)
{
_settings.setAll(lvl);
_logSettings.setAll(lvl);
}

void set(LogCategory cat, LogLevel lvl)
{
_settings.modes[cat] = lvl;
_logSettings.modes[cat] = lvl;
}

bool isSet(LogCategory cat, LogLevel lvl) const
{
return _isEnabled && _settings.modes[cat] >= lvl;
return _isEnabled && _logSettings.modes[cat] >= lvl;
}

bool isSet(std::pair<LogCategory,LogLevel> mode) const
Expand All @@ -123,8 +123,6 @@ class BOOST_EXTENSION_LOGGER_DECL Logger
protected:
Logger(LogSettings settings, bool enabled);

Logger(bool enabled);

enum LogStructure {LS_NONE, LS_BEGIN, LS_END};

virtual void writeInternal(std::string msg, LogCategory cat, LogLevel lvl,
Expand All @@ -137,10 +135,8 @@ class BOOST_EXTENSION_LOGGER_DECL Logger
std::string getCategory(LogCategory cat) const;
std::string getLevel(LogLevel lvl) const;

static Logger* instance;

private:
LogSettings _settings;
static Logger* _instance;
LogSettings _logSettings;
bool _isEnabled;
};

Expand Down
2 changes: 1 addition & 1 deletion SimulationRuntime/cpp/Include/FMU/FMUGlobalSettings.h
Expand Up @@ -33,7 +33,7 @@ class FMUGlobalSettings : public IGlobalSettings
virtual bool getInfoOutput() { return false; }
virtual void setInfoOutput(bool) {}
virtual string getOutputPath() { return "./"; }
virtual LogSettings getLogSettings() {return LogSettings();}
virtual LogSettings getLogSettings() {return LogSettings(LF_FMI);}
virtual void setLogSettings(LogSettings) {}
virtual OutputPointType getOutputPointType() { return OPT_ALL; };
virtual void setOutputPointType(OutputPointType) {};
Expand Down
5 changes: 1 addition & 4 deletions SimulationRuntime/cpp/Include/FMU/FMULogger.h
Expand Up @@ -21,10 +21,7 @@ class BOOST_EXTENSION_EXPORT_DECL FMULogger : Logger

static void initialize(fmiCallbackLogger callbackLogger, fmiComponent component, fmiString instanceName)
{
if(instance != NULL)
delete instance;

instance = new FMULogger(callbackLogger, component, instanceName);
_instance = new FMULogger(callbackLogger, component, instanceName);
}

protected:
Expand Down
2 changes: 1 addition & 1 deletion SimulationRuntime/cpp/Include/FMU2/FMU2GlobalSettings.h
Expand Up @@ -65,7 +65,7 @@ class FMU2GlobalSettings : public IGlobalSettings
virtual bool getInfoOutput() { return false; }
virtual void setInfoOutput(bool) {}
virtual string getOutputPath() { return "./"; }
virtual LogSettings getLogSettings() { return LogSettings(); }
virtual LogSettings getLogSettings() { return LogSettings(LF_FMI2); }
virtual void setLogSettings(LogSettings) {}
virtual OutputPointType getOutputPointType() { return OPT_ALL; };
virtual void setOutputPointType(OutputPointType) {};
Expand Down
12 changes: 7 additions & 5 deletions SimulationRuntime/cpp/Include/FMU2/FMU2Wrapper.cpp
Expand Up @@ -58,9 +58,11 @@ FMU2Logger::FMU2Logger(FMU2Wrapper *wrapper,
Logger(logSettings, enabled),
_wrapper(wrapper)
{
if (instance != NULL)
delete instance;
instance = this;
}

void FMU2Logger::initialize(FMU2Wrapper *wrapper, LogSettings &logSettings, bool enabled)
{
_instance = new FMU2Logger(wrapper, logSettings, enabled);
}

void FMU2Logger::writeInternal(string msg, LogCategory cat, LogLevel lvl,
Expand Down Expand Up @@ -115,7 +117,8 @@ FMU2Wrapper::FMU2Wrapper(fmi2String instanceName, fmi2String GUID,
_logCategories = loggingOn? 0xFFFF: 0x0000;
LogSettings logSettings = _global_settings.getLogSettings();
logSettings.setAll(loggingOn? LL_DEBUG: LL_ERROR);
_logger = new FMU2Logger(this, logSettings, loggingOn);
FMU2Logger::initialize(this, logSettings, loggingOn);
_logger = Logger::getInstance();

// setup model
_model = createSystemFMU(&_global_settings);
Expand All @@ -131,7 +134,6 @@ FMU2Wrapper::~FMU2Wrapper()
{
delete [] _clock_buffer;
delete _model;
delete _logger;
}

fmi2Status FMU2Wrapper::setDebugLogging(fmi2Boolean loggingOn,
Expand Down
6 changes: 4 additions & 2 deletions SimulationRuntime/cpp/Include/FMU2/FMU2Wrapper.h
Expand Up @@ -70,9 +70,11 @@ class FMU2Wrapper;
class FMU2Logger: public Logger
{
public:
FMU2Logger(FMU2Wrapper *wrapper, LogSettings &logSettings, bool enabled);
static void initialize(FMU2Wrapper *wrapper, LogSettings &logSettings, bool enabled);

protected:
FMU2Logger(FMU2Wrapper *wrapper, LogSettings &logSettings, bool enabled);

virtual void writeInternal(string msg, LogCategory cat, LogLevel lvl,
LogStructure ls);
FMU2Wrapper *_wrapper;
Expand Down Expand Up @@ -161,7 +163,7 @@ class FMU2Wrapper

private:
FMU2GlobalSettings _global_settings;
FMU2Logger *_logger;
Logger *_logger;
MODEL_CLASS *_model;
std::vector<string> _string_buffer;
bool *_clock_buffer;
Expand Down
52 changes: 31 additions & 21 deletions SimulationRuntime/cpp/SimCoreFactory/OMCFactory/OMCFactory.cpp
Expand Up @@ -28,35 +28,44 @@ namespace po = boost::program_options;
class LoggerXMLTCP: public LoggerXML
{
public:
LoggerXMLTCP(std::string host, int port, LogSettings &logSettings):
LoggerXML(logSettings, true, _sstream),
_endpoint(boost::asio::ip::address::from_string(host), port),
_socket(_ios)
virtual ~LoggerXMLTCP()
{
_socket.connect(_endpoint);
if (instance != NULL)
delete instance;
instance = this;
_socket.close();
}

virtual ~LoggerXMLTCP()
static void initialize(std::string host, int port, LogSettings &logSettings)
{
_socket.close();
_instance = new LoggerXMLTCP(host, port, logSettings);
}

protected:
boost::asio::io_service _ios;
boost::asio::ip::tcp::endpoint _endpoint;
boost::asio::ip::tcp::socket _socket;
stringstream _sstream;
LoggerXMLTCP(std::string host, int port, LogSettings &logSettings)
: LoggerXML(logSettings, true, _sstream)
, _endpoint(boost::asio::ip::address::from_string(host), port)
, _socket(_ios)
{
if (logSettings.format != LF_XML && logSettings.format != LF_XMLTCP) {
throw ModelicaSimulationError(MODEL_FACTORY,
"xmltcp logger requires log-format xml");
}
_socket.connect(_endpoint);
}

virtual void writeInternal(string msg, LogCategory cat, LogLevel lvl,
LogStructure ls)
{
_sstream.str("");
LoggerXML::writeInternal(msg, cat, lvl, ls);
_socket.send(boost::asio::buffer(_sstream.str()));
if (_logSettings.format == LF_XMLTCP)
_socket.send(boost::asio::buffer(_sstream.str()));
else
std::cout << _sstream.str();
}

boost::asio::io_service _ios;
boost::asio::ip::tcp::endpoint _endpoint;
boost::asio::ip::tcp::socket _socket;
std::stringstream _sstream;
};

/**
Expand Down Expand Up @@ -123,7 +132,7 @@ static LogSettings initializeLogger(const po::variables_map& vm)
"info", LL_INFO MAP_LIST_SEP "debug", LL_DEBUG MAP_LIST_END;
map<string, LogFormat> logFormatMap = MAP_LIST_OF
"txt", LF_TXT MAP_LIST_SEP "xml", LF_XML MAP_LIST_SEP
"xmltcp", LF_XML MAP_LIST_END;
"xmltcp", LF_XMLTCP MAP_LIST_END;
map<string, LogOMEdit> logOMEditMap = MAP_LIST_OF
"LOG_EVENTS", LOG_EVENTS MAP_LIST_SEP "LOG_INIT", LOG_INIT MAP_LIST_SEP
"LOG_LS", LOG_LS MAP_LIST_SEP "LOG_NLS", LOG_NLS MAP_LIST_SEP
Expand Down Expand Up @@ -198,9 +207,8 @@ static LogSettings initializeLogger(const po::variables_map& vm)
logSettings.modes[i] = LL_WARNING;
}

string logFormat_str;
if (vm.count("log-format")) {
logFormat_str = vm["log-format"].as<string>();
string logFormat_str = vm["log-format"].as<string>();
if (logFormatMap.find(logFormat_str) != logFormatMap.end())
logSettings.format = logFormatMap[logFormat_str];
else
Expand All @@ -215,12 +223,14 @@ static LogSettings initializeLogger(const po::variables_map& vm)
// initialize logger if it has been enabled
if (Logger::isEnabled()) {
int port = vm["log-port"].as<int>();
if (port > 0 && logFormat_str == "xmltcp") {
if (port > 0) {
try {
new LoggerXMLTCP("127.0.0.1", port, logSettings);
LoggerXMLTCP::initialize("127.0.0.1", port, logSettings);
}
catch (std::exception &ex) {
std::cerr << "Failed to start xmltcp logger: " << ex.what() << std::endl;
throw ModelicaSimulationError(MODEL_FACTORY,
"Failed to start logger with port " + to_string(port) + ": "
+ ex.what() + '\n');
}
}
else
Expand Down

0 comments on commit 01ca4a3

Please sign in to comment.