2.2.1. SDK Logging
The Proximie SDK provides diagnostic logging support, with the option to set the output/detail level with a severity setting.
By default, the SDK logs output to standard output and error streams, depending
on the severity of the message (namely warnings and errors to error output,
and the informational levels to standard output).
See LogSeverity for supported log levels.
2.2.1.1. Logging delegates
The Proximie SDK allows the application handle logging by providing a logging
delegate. This delegate needs to be a class derived from the abstract class
PxLogger::ILoggerDelegate,
which implements a simple interface to provide logging for the application.
A minimal logger implementation might look like this:
using namespace Proximie::PxCore;
class MinimalLogger : public PxLogger::ILoggerDelegate
{
public:
// Implement the actual logging suitable for your application
void handleLog(PxLogger::LogSeverity level,
const char* message,
const PxLogger::LogMeta& data) override;
};
from px_core import core
class MinimalLogger(core.PxLogger.ILoggerDelegate):
"""Implement the actual logging suitable for your application."""
def handle_log(self, level, message, data):
...
void MinimalLogger::handleLog(PxLogger::LogSeverity level, const char* message,
const PxLogger::LogMeta& data) {
auto& out = level >= PxLogger::LogSeverity::ERROR ? std::cerr : std::cout;
out << PxLogger::timestamp(data.timestamp)
<< " [" << PxLogger::severityLabel(level) << "] "
<< PxLogger::escapeFormat(message) << std::endl;
}
def handle_log(self, level, message, data):
import sys
out = sys.stderr if level >= core.PxLogger.LogSeverity.ERROR else sys.stdout
out.write(
f"{core.PxLogger.timestamp(data.timestamp)}"
f" [{core.PxLogger.severity_label(level)}]"
f" {message}\n"
)
Note the helper functions like
PxLogger::severityLabel,
which can be used to help format logging output. To set the delegate,
create your logger and pass it to the SDK logger:
auto logger = std::make_shared<MinimalLogger>();
PxLogger::get()->setDelegate(logger);
logger = MinimalLogger()
core.PxLogger.get().set_delegate(logger)
2.2.1.2. Log levels
The default SDK log level is set to LogSeverity::Info.
PxLogger also provides the ability to set the
logging severity using severityLevel().
You can optionally provide the log level when setting the delegate:
PxLogger::get()->setDelegate(logger, PxLogger::LogSeverity::ERROR);
core.PxLogger.get().set_delegate(logger, core.PxLogger.LogSeverity.ERROR)
Also to set (or reset) to the standard output logger:
PxLogger::get()->useStdOutputDelegate(PxLogger::LogSeverity::DEBUG);
core.PxLogger.get().use_std_output_delegate(core.PxLogger.LogSeverity.DEBUG)