9.1. Module Structure

The logging module provides the following classes:

  • Log is the core class of the logging module. This singleton is not only in charge of the logging operations (see Logging Messages), but it also provides configuration APIs to set different logging configuration aspects (see Module Configuration), as well as logging filtering at various levels (see Filters). It contains zero or more LogConsumer objects. The singleton’s consuming thread feeds the log entries added to the logging queue using the macros defined in Logging Messages to the log consumers sequentially (see Logging Thread).

    Warning

    Log API exposes member function Log::QueueLog(). However, this function is not intended to be used directly. To add messages to the log queue, use the methods described in Logging Messages.

  • LogConsumer is the base class for all the log consumers (see Consumers). It includes the member functions that derived classes should overload to consume log entries.

    • OStreamConsumer derives from LogConsumer. It defines how to consume log entries for outputting to an std::ostream object. It includes a member function that derived classes must overload to define the desired std::ostream object.

      1. StdoutConsumer derives from OStreamConsumer. It defines STDOUT as the output std::ostream object (see StdoutConsumer).

      2. StdoutErrConsumer derives from OStreamConsumer. It defines a Log::Kind threshold so that if the Log::Kind is equal to or more severe than the selected threshold, the output defined will be STDERR. Otherwise, it defines STDOUT as the output (see StdoutErrConsumer).

      3. FileConsumer derives from OStreamConsumer. It defines an user specified file as the output std::ostream object (see FileConsumer).

../../_images/class_diagram.svg

Logging module class diagram

The module can be further extended by creating new consumer classes deriving from LogConsumer and/or OStreamConsumer. To enable a custom consumer just follow the instructions on Register Consumers.