How to enable logging within Modern C++ code

This article overviews how to enable logging within Modern C++ code.  

Logging options are illustrated via a simple example with hyperlinks to the relevant online documentation.

The available logging options include:

  • Logging Verbosity Level
  • Logging by Category
  • Logging Print Format
  • Logging to a single cumulative file or a set of files

When logging to a set of files,  the user has the option of applying various file set generation rules:

  • File Prefix
  • File Suffix
  • Maximum File Size
  • Maximum number of Files


In this example:

  • Verbosity for all categories is initially set to STATUS_LOCAL
  • Verbosity for the COMMUNICATIONS category is changed to WARNING
  • Print Format is set to VERBOSE_TIMESTAMPED for all messages.
  • Log File Options (mutually exclusive):
    • No log file  
    • Cumulative log file   
    • File set   
// include the Logger’s header file
#include <rti/config/Logger.hpp>

// create a 'Logger' object
static rti::config::Logger& Logging = rti::config::Logger::instance();

// Specifying global logging Verbosity

// Specifying  logging by category   (optional)
Logging.verbosity_by_category(rti::config::LogCategory::COMMUNICATION, \ rti::config::Verbosity::WARNING);

// Specifying print format  (optional)

// Logging Option 1: No log file

// Logging Option 2: Specifying logging to a single file  

// Logging Option 3: Specifying logging to a fileset   
Logging.output_file_set("LogFile", ".log", 1000, 3);


Logging Option 1:    No log file specified

If no log file is specified,  the results are printed to the console (typically stdout).

Logging Option 2:   Logging to a single file

If a single log file is specified,   the named file grows without bounds and an existing file is overwritten.

Logging Option 3:  Logging to a set of files

In this example the four parameters are:

  • file_suffix = “LogFile
  • file_prefix = “.log”
  • max_byptes = 1000
  • max_files = 3

 If Option 3 is selected, the resultant file set could include LogFile1.log, LogFile2.log, and LogFile3.log.   Where each file is limited to 1000 bytes.

When the last file reaches the ‘max_bytes’ specific,  the logging operation will overwrite existing files (i.e. rollover takes place).  

Note:A Request for Future Enhancement (RFE) has been filed to allow the logging option to be halted if desired:

CORE-9849 Ability to stop logging when the final file is reached Logger's output_file_set

Programming Language: