The OnixS::CME::MDH::Logger abstraction receives log entries produced by handlers and Feed Engines. A Handler and an explicitly constructed Feed Engine select their loggers independently; assigning a logger to one does not configure the other.
Default Logging Behavior
By default, a Handler uses the library-managed file logger, which writes to OnixS.CmeMdpPremiumCppHandlers.log. Passing nullptr to OnixS::CME::MDH::LoggingSettings::logger selects this default again. To disable Handler logging, bind an OnixS::CME::MDH::NullLogger explicitly.
Socket and Solarflare Feed Engines default to OnixS::CME::MDH::NullLogger. To capture events from an explicitly constructed Feed Engine, set the logger through OnixS::CME::MDH::NetFeedEngineSettings::logger before constructing the engine. Passing nullptr selects the Feed Engine's default OnixS::CME::MDH::NullLogger again.
Ready-to-use Logger Implementations
The SDK contains the following implementations of the OnixS::CME::MDH::Logger abstraction:
- OnixS::CME::MDH::FileLogger writes entries to a text file. The file may be limited by size; once it reaches the configured limit, the logger rolls it over and starts a new file.
- OnixS::CME::MDH::NullLogger discards all entries. Bind it explicitly to a Handler to disable Handler logging.
- Note
- A logger instance can be shared by multiple handlers and Feed Engines. These components do not manage its lifetime; keep the logger alive until every component using it has been destroyed.
Binding a Logger to the Handler and Feed Engine
The following example configures one file logger for both a Handler and an explicit Socket Feed Engine. OnixS::CME::MDH::SolarflareFeedEngineSettings supports the same logger setting.
struct FileLoggerIssueTracer : public FileLoggerListener
{
void onFileLoggerIssue(const FileLogger& logger, const Messaging::Char* issue) override
{
std::cout << "ALERT!!! An issue occurred while logging data. " << issue << std::endl;
}
};
FileLoggerSettings loggerSettings;
loggerSettings.severityLevel(LogSeverity::Debug);
FileLoggerIssueTracer loggerTracer;
FileLogger logger(loggerSettings, &loggerTracer);
SocketFeedEngineSettings feedEngineSettings;
feedEngineSettings.logger(&logger);
SocketFeedEngine feedEngine(feedEngineSettings);
Handler handler;
handler.settings().channel(310).connectivityConfigurationFile("config.xml")
.logging().debug().traceMessages(MessageTracing::SbeFormat);
handler.settings().feeds().engine(&feedEngine);
handler.settings().logging().logger(&logger);