Enrollment 28.2.0
Loading...
Searching...
No Matches
Logger

The library defines Logger interface to log messages. More...

Collaboration diagram for Logger:

Classes

class  FormattingComposer
 Compose message from variadic arguments. More...
class  FormattingLogger
 It provides functions with format specifier to compose and log message via provided Logger. More...
class  LogMessage
 Compose Logger message. More...
class  Logger
 Interface for library logging. More...
class  NullLogger
 The logger implementation that do not logs. More...
struct  LoggerCallBacks
 LoggerCallBacks contains logger handle and function pointers as callbacks. More...
class  CallbackLogger
 CallbackLogger is logger for binary part of libary due to C boundary. More...
class  GlobalLogger
 Holds instance of Logger. More...

Typedefs

using LogMessageCallback = const char* (*)(void* composerData)
 Function pointer to compose message in binary.
using LoggerCallback = void (*)(void* logger, LogMessageCallback composer, void* composerData)
 Function pointer to log from binary.

Detailed Description

The library defines Logger interface to log messages.

The library defines Logger interface to log messages. The library knows when and what to log, but how it leaves on library user. The default GlobalLogger is dummy implementation, that ignores all messages on all logging levels. The client can set global Logger for whole library.

  • c++
    class ConsoleLogger : public Logger
    {
    void LogInfo(LogMessage& msg) final
    {
    std::cout << " " << msg.Compose() << std::endl;
    }
    void LogError(LogMessage& msg) final
    {
    std::cout << " error: " << msg.Compose() << std::endl;
    }
    void LogDebug(LogMessage& msg) final
    {
    std::cout << " debug: " << msg.Compose() << std::endl;
    }
    };
    static void Log()
    {
    GlobalLogger::Set(std::make_shared<ConsoleLogger>());
    }
  • java
    class ConsoleLogger extends Logger {
    public void LogInfo(LogMessage msg) {
    System.out.println(" native: " + msg.Compose());
    }
    public void LogError(LogMessage msg) {
    System.out.println(" native:error: " + msg.Compose());
    }
    public void LogDebug(LogMessage msg) {
    System.out.println(" native:debug: " + msg.Compose());
    }
    }
    public void Log() {
    Logger log = new ConsoleLogger();
    GlobalLogger.Set(log);
    }
  • csharp
    class ConsoleLogger : Logger
    {
    public override void LogInfo(LogMessage msg)
    {
    System.Console.WriteLine(" native: " + msg.Compose());
    }
    public override void LogError(LogMessage msg)
    {
    System.Console.WriteLine(" native:error: " + msg.Compose());
    }
    public override void LogDebug(LogMessage msg)
    {
    System.Console.WriteLine(" native:debug: " + msg.Compose());
    }
    }
    public void Log()
    {
    Logger log = new ConsoleLogger();
    GlobalLogger.Set(log);
    }

The Logger can be implemented also in Java / CSharp bindings.

Logger design

The logger has 3 levels

  • Info - on interface boundaries.
  • Error - when error is reported by used libraries of in wrong arguments
  • Debug - messages that helps with bug hunting in this library

Client decides which level is logged. The LogMessage is used to avoid unnecessary composition of logger message. LogMessage is composed only when client wants to log it.

Warning
Client MUST NOT store the LogMessage and use it outside Logger::LogInfo, Logger::LogError, Logger::LogDebug call. The library stores only references to data in LogMessage. The references can be invalid when Logger functions end.
Note
Only for C++ the library provides also FormattingComposer, FormattingLogger that extends (and use) Logger with functionality similar as printf function.
Logger design

For more details see Logging overview.

Typedef Documentation

◆ LoggerCallback

using LoggerCallback = void (*)(void* logger, LogMessageCallback composer, void* composerData)

Function pointer to log from binary.

It is provided by header part and used in binary to log messages. The parameter logger is created and used ONLY in header part.

Parameters
loggeris pointer to Logger class used in header part. It is provide to binary in LoggerCallBacks and provide it back from binary to header part.
composeris LogMessageCallback called when header part wants to compose message in binary part of library
composerDatadata necessary for composer, it is interpreted and used ONLY in binary part of library
Note
Only for C++

◆ LogMessageCallback

using LogMessageCallback = const char* (*)(void* composerData)

Function pointer to compose message in binary.

It is called by header part of library and executed in binary part of library. The parameter composerData is created and used ONLY in binary part.

Parameters
composerDatadata that is interpreted and used ONLY in binary part of library
Returns
message
Note
Only for C++