Log Manager and Log objects for application and GDK message output [v26.01.0].
Overview
The Log module handles all logging output for both the client application and the GDK itself. The Log Manager handles the creation and destruction of Log objects and always owns a default log named "default" (although it is not initialized by default).
All CRM64Pro GDK modules use this default log for messages and information output. The client application can use the default log or create any number of additional Log objects.
Key features
-
Default log: Built-in "default" log used by all GDK modules
-
Multiple logs: Create additional Log objects for application-specific output
-
Pause control: Stop and resume log output without releasing the log
-
Debug mode: Automatic error code logging when using GDK debug builds
-
Color output: ANSI color coding for stdout output based on severity levels
-
Indentation: Automatic indentation management for structured output
-
Prefix characters: Customizable prefix characters for organized output blocks
Default log
The Log Manager always owns a default log named "default" with special characteristics:
| Initialization | Not initialized by default; call Log::init() to enable output |
| GDK usage | All CRM64Pro GDK modules output messages through this log |
| Release protection | Cannot be released; use Log::pause() to stop output |
When using LM_STDOUT, messages are automatically colored based on severity:
Debug mode logging
An automatic error code logging mode is available when both conditions are met:
When enabled, all return error codes are automatically logged to the default log.
Structured Output
The log system supports automatic indentation management and prefix characters for organized output:
| Indentation | Use pushIndent()/popIndent() to manage automatic spacing |
| Prefix characters | Use setPrefix()/clearPrefix() to add block markers like "|" or ">>" |
| Combined usage | Combine prefix and indentation for clear hierarchical output |
Manager type
This is a standard manager: objects are not shared and must be unique using its name as the key. You cannot create an object with the same name as another one already created.
Best practices
-
Initialize the default log using Log::init() right after Main::Instance() to capture all GDK initialization messages
-
Use Log::pause() instead of releasing when you need to temporarily stop default log output
-
Create separate Log objects for different application subsystems to organize output
-
Use debug builds with LL_DEBUG log level during development for comprehensive error tracking
-
Ensure each custom log has a unique name before creation
-
Access the manager exclusively through Main::ILogMgr()
-
Use pushIndent()/popIndent() pairs to create structured, readable log output
-
Use setPrefix() to mark logical blocks or sections with characters like "|" or ">>"
-
Always call clearPrefix() when done to avoid prefix leaking into subsequent messages
- Note
- The Log Manager and default Log are singletons, automatically created once Main is instantiated. You can get a reference to this manager using Main::ILogMgr() method.
The Log Manager is automatically released when Main::Terminate() is called. At this time, any resource still loaded will be released, avoiding resource leaks.
|
| bool | CRM64Pro::Log::info (Sint32 iMode=0) override |
| | Request Log object information.
|
| const string & | CRM64Pro::Log::getName () const override |
| | Get the name.
|
| Uint32 | CRM64Pro::Log::getID () const override |
| | Get the ID.
|
| bool | CRM64Pro::Log::init (const string &sAppname, eLogLevel eLL, Sint32 iLM, const string &sFilename="", const string &sAuthor="", const string &sEmail="", const string &sWeb="") |
| | Initialize the log object.
|
| bool | CRM64Pro::Log::pause () |
| | Disable log output temporarily.
|
| bool | CRM64Pro::Log::resume () |
| | Enable log output.
|
| Sint32 | CRM64Pro::Log::status () const |
| | Get log status.
|
| bool | CRM64Pro::Log::msg (eLogLevel eLL, const char *szFmt,...) |
| | Write a message to the log.
|
| eLogLevel | CRM64Pro::Log::getLogLevel () |
| | Get log detail level.
|
| Sint32 | CRM64Pro::Log::getLogMode () const |
| | Get log mode.
|
| Sint32 | CRM64Pro::Log::setLogMode (Sint32 iLM, const string &sFilename="") |
| | Set log mode.
|
| const string & | CRM64Pro::Log::getFilename () const |
| | Get log filename.
|
| bool | CRM64Pro::Log::setTimeStamp (bool bEnabled) |
| | Enable/disable timestamp in log messages.
|
| bool | CRM64Pro::Log::getTimeStamp () const |
| | Get timestamp status.
|
| bool | CRM64Pro::Log::pushIndent (Sint32 iSpaces=2) |
| | Push a new indentation level onto the stack.
|
| bool | CRM64Pro::Log::popIndent () |
| | Pop the most recent indentation level from the stack.
|
| bool | CRM64Pro::Log::resetIndent () |
| | Reset all indentation to zero.
|
| Sint32 | CRM64Pro::Log::getIndent () const |
| | Get the current total indentation level.
|
| bool | CRM64Pro::Log::setPrefix (const char *szPrefix) |
| | Set a prefix character to be printed before each message.
|
| bool | CRM64Pro::Log::clearPrefix () |
| | Clear the prefix character.
|
| bool | CRM64Pro::LogMgr::info (Sint32 iMode=0) override |
| | Request Log Manager information.
|
| Sint32 | CRM64Pro::LogMgr::create (const string &sName, Uint32 iUnused=0) override |
| | Create a new log object.
|
| bool | CRM64Pro::LogMgr::close (Sint32 idLog) override |
| | Close and destroy a log object.
|
| Sint32 | CRM64Pro::LogMgr::getCount () const override |
| | Get number of loaded objects.
|
| Sint32 | CRM64Pro::LogMgr::setName (Sint32 idLog, const string &sName) override |
| | Change the object name.
|
| Log * | CRM64Pro::LogMgr::get (Sint32 idLog=0) |
| | Get a pointer to the log object.
|
◆ LM_NULL
◆ LM_FILE
Log output mode for the 'lm' parameter in CRM64Pro::Log::init(). Output to a file and overwrite existing content.
◆ LM_FILEAPPEND
Log output mode for the 'lm' parameter in CRM64Pro::Log::init(). Output to a file, appending to existing content.
◆ LM_STDOUT
◆ LM_CONSOLE
Log output mode for the 'lm' parameter in CRM64Pro::Log::init(). Output to the integrated default console.
◆ LM_RESERVED
Log output mode reserved for internal use; do not use it.
◆ eLogLevel
Log levels.
| Enumerator |
|---|
| LL_OFF | Disable all logging.
|
| LL_CRITICAL | Fatal errors, application crash, or assertions.
|
| LL_ERROR | Runtime errors that do not require immediate termination.
|
| LL_WARNING | Undesirable states or use of deprecated APIs.
|
| LL_INFO | Runtime events (startup/shutdown). No-timestamp msgs.
|
| LL_DEBUG | Detailed information for flow control.
|
| LL_TRACE | Very detailed information, potentially high-volume.
|
◆ info() [1/2]
| bool CRM64Pro::Log::info |
( |
Sint32 | iMode = 0 | ) |
|
|
override |
Request Log object information.
Writes object information to the default log.
- Parameters
-
| iMode | unused for the time being. |
- Returns
- true on success or false on failure.
◆ getName()
| const string & CRM64Pro::Log::getName |
( |
| ) |
const |
|
override |
Get the name.
- Returns
- The object name.
◆ getID()
| Uint32 CRM64Pro::Log::getID |
( |
| ) |
const |
|
override |
Get the ID.
- Returns
- Object ID.
◆ init()
| bool CRM64Pro::Log::init |
( |
const string & | sAppname, |
|
|
eLogLevel | eLL, |
|
|
Sint32 | iLM, |
|
|
const string & | sFilename = "", |
|
|
const string & | sAuthor = "", |
|
|
const string & | sEmail = "", |
|
|
const string & | sWeb = "" ) |
Initialize the log object.
- Parameters
-
| sAppname | Name of your application. |
| eLL | Log verbosity threshold. Messages with a severity level numerically higher than this will be ignored. See ::eLogLevel. |
| iLM | Log mode. See LM_NULL, LM_STDOUT, LM_FILE, LM_FILEAPPEND and LM_CONSOLE. |
| sFilename | Name of log file. Only used with LM_FILE or LM_FILEAPPEND. Directory separators '\' and '/' are supported. |
| sAuthor | Author name. |
| sEmail | Author email address. |
| sWeb | Author web site. |
- Returns
- true on success or false on failure.
◆ pause()
| bool CRM64Pro::Log::pause |
( |
| ) |
|
Disable log output temporarily.
Temporarily disables log output.
- Returns
- true on success or false on failure.
◆ resume()
| bool CRM64Pro::Log::resume |
( |
| ) |
|
Enable log output.
Re-enables log output.
- Returns
- true on success or false on failure.
◆ status()
| Sint32 CRM64Pro::Log::status |
( |
| ) |
const |
◆ msg()
| bool CRM64Pro::Log::msg |
( |
eLogLevel | eLL, |
|
|
const char * | szFmt, |
|
|
| ... ) |
Write a message to the log.
- Parameters
-
| eLL | Severity level of the message. The message is logged only if this value is less than or equal to the verbosity set in init(). See ::eLogLevel. |
| szFmt | A printf() style message format string. |
| ... | Variable arguments for format string. |
- Returns
- true on success or false on failure.
◆ getLogLevel()
Get log detail level.
- Returns
- Current log verbosity. See ::eLogLevel.
◆ getLogMode()
| Sint32 CRM64Pro::Log::getLogMode |
( |
| ) |
const |
◆ setLogMode()
| Sint32 CRM64Pro::Log::setLogMode |
( |
Sint32 | iLM, |
|
|
const string & | sFilename = "" ) |
Set log mode.
- Parameters
-
- Returns
- 0 on success, or a negative error code on failure.
◆ getFilename()
| const string & CRM64Pro::Log::getFilename |
( |
| ) |
const |
Get log filename.
- Returns
- The current log filename.
◆ setTimeStamp()
| bool CRM64Pro::Log::setTimeStamp |
( |
bool | bEnabled | ) |
|
Enable/disable timestamp in log messages.
Disabled by default. Only works with LM_FILE or LM_FILEAPPEND modes. Does not display timestamps in console output.
- Parameters
-
| bEnabled | true to enable or false to disable. |
- Returns
- true on success or false on failure.
◆ getTimeStamp()
| bool CRM64Pro::Log::getTimeStamp |
( |
| ) |
const |
Get timestamp status.
- Returns
- true if enabled or false if disabled.
◆ pushIndent()
| bool CRM64Pro::Log::pushIndent |
( |
Sint32 | iSpaces = 2 | ) |
|
Push a new indentation level onto the stack.
Increases the current indentation by the specified number of spaces. Each call to pushIndent() should be paired with a corresponding popIndent(). Indentation is cumulative: multiple pushIndent() calls will add their spaces together.
- Parameters
-
| iSpaces | Number of spaces to add to the current indentation level (default: 2). |
- Returns
- true on success or false on failure.
◆ popIndent()
| bool CRM64Pro::Log::popIndent |
( |
| ) |
|
Pop the most recent indentation level from the stack.
Decreases the current indentation by removing the last pushed indent level. Should be called to match each pushIndent() call.
- Returns
- true on success or false on failure.
◆ resetIndent()
| bool CRM64Pro::Log::resetIndent |
( |
| ) |
|
Reset all indentation to zero.
Clears the entire indentation stack and resets current indentation to 0. Useful for recovering from mismatched push/pop calls or resetting state.
- Returns
- true on success or false on failure.
◆ getIndent()
| Sint32 CRM64Pro::Log::getIndent |
( |
| ) |
const |
Get the current total indentation level.
Returns the sum of all active indentation levels (total spaces).
- Returns
- Current indentation level in spaces.
◆ setPrefix()
| bool CRM64Pro::Log::setPrefix |
( |
const char * | szPrefix | ) |
|
Set a prefix character to be printed before each message.
- Parameters
-
| szPrefix | String to print at the beginning of each message (e.g., "|", ">>", etc.). The prefix appears before indentation. |
- Returns
- true on success or false on failure.
- Note
- The prefix remains active until clearPrefix() is called.
◆ clearPrefix()
| bool CRM64Pro::Log::clearPrefix |
( |
| ) |
|
Clear the prefix character.
- Returns
- true on success or false on failure.
◆ info() [2/2]
| bool CRM64Pro::LogMgr::info |
( |
Sint32 | iMode = 0 | ) |
|
|
override |
Request Log Manager information.
Writes manager information to the default log.
- Parameters
-
| iMode | -1 to display only manager information. 0 (default) to display manager and all objects. Specific object ID to display manager and only that object. |
- Returns
- true on success or false on failure.
◆ create()
| Sint32 CRM64Pro::LogMgr::create |
( |
const string & | sName, |
|
|
Uint32 | iUnused = 0 ) |
|
override |
Create a new log object.
- Parameters
-
| sName | name for the log object (e.g. 'myLog'). Must be unique; longer names are truncated to 64 characters. |
| iUnused | unused for the time being. |
- Returns
- 0 or greater on success (the log id) or a negative error code on failure.
◆ close()
| bool CRM64Pro::LogMgr::close |
( |
Sint32 | idLog | ) |
|
|
override |
Close and destroy a log object.
- Parameters
-
| idLog | 0 to close all logs, or a specific log id. The default log cannot be removed with this method. |
- Returns
- true on success or false on failure.
- Note
- The default log (id=0) is ignored and will not be closed.
◆ getCount()
| Sint32 CRM64Pro::LogMgr::getCount |
( |
| ) |
const |
|
override |
Get number of loaded objects.
- Returns
- Number of log objects.
◆ setName()
| Sint32 CRM64Pro::LogMgr::setName |
( |
Sint32 | idLog, |
|
|
const string & | sName ) |
|
override |
Change the object name.
- Parameters
-
| idLog | Log id. |
| sName | new name (e.g. 'myLog'). Must be unique; longer names are truncated to 64 characters. |
- Returns
- 0 on success, or a negative error code on failure.
◆ get()
| Log * CRM64Pro::LogMgr::get |
( |
Sint32 | idLog = 0 | ) |
|
Get a pointer to the log object.
- Parameters
-
| idLog | Log id. 0 (default) returns the default log. |
- Returns
- nullptr if the log was not found, otherwise a pointer to the Log object.