About
The logger interface allows to create new custom loggers for specific tasks and to access existing loggers. Loggers are presented in the "Console" window in Cinema 4D and registered at the maxon::Loggers registry.
Messages can be sent to the default logger using ApplicationOutput().
Custom Loggers
A new custom logger can be created with maxon::LoggerRef::Create() and is then registered at maxon::Loggers. A logger type defines the target of the logger (see Logger Types).
A custom logger is configured with:
const maxon::Id loggerID {
"net.maxonexample.logger" };
{
{
g_exampleLogger = maxon::Loggers::Default();
}
else
{
g_exampleLogger.SetName("Example Logger"_s);
maxon::Loggers::Insert(loggerID, g_exampleLogger)
iferr_return;
}
}
static void FreeExampleLogger()
{
g_exampleLogger = nullptr;
}
Using Custom Loggers
A message is sent to a custom logger using the Write() function:
const maxon::Id loggerId {
"net.maxonexample.logger" };
Built-In Loggers
All existing loggers are registered at maxon::Loggers. These three loggers are there for public use:
- maxon::Loggers::Default: The default logger (published object for direct use).
- maxon::ID_LOGGER_PYTHON: The Python logger's ID, defined in python.framework, cpython.h.
- maxon::Loggers::Process: The IDE console logger (published object for direct use).
- Note
- The default logger is used with ApplicationOutput().
Logger Types
A logger type implements the actual processing of a given message e.g. if that message is displayed in the GUI or written to a file.
Logger types are based on maxon::LoggerTypeInterface:
for (const auto& loggerTypeAudience : logger.GetLoggerTypes())
{
const maxon::LoggerTypeRef loggerType = loggerTypeAudience.GetFirst();
loggerType.ObservableLoggerNotify().AddObserver(LoggerCallback)
iferr_return;
}
maxon::UserLoggerTypeInterface is the logger type that displays the message in Cinema 4D's "Console" window:
maxon::FileLoggerTypeInterface is the logger type that writes the message to a file:
const maxon::LoggerRef defaultLogger = maxon::Loggers::Default();
for (const auto& logger : defaultLogger.GetLoggerTypes())
{
const maxon::LoggerTypeRef loggerType = logger.GetFirst();
if (loggerType.IsInstanceOf<maxon::UserLoggerTypeRef>())
{
const maxon::UserLoggerTypeRef userLoggerType = maxon::Cast<maxon::UserLoggerTypeRef>(loggerType);
{
}
}
Further Reading