roq-logging#

Output#

Always using stdout and stderr.

Synchronicity#

Logging is synchronous if the process has an attached terminal. This is normally what you want if you’re launching the program from the command-line.

Loggig is asynchronous if the process has no attached terminal. This benefits the predictability of latency of the running process because it can offload the writing of the message to a secondary thread.

Templates#

Logging capabilities are accessed through templates. This is done to capture filename and line number at the point where the log message is being generated.

The template identifies the severity

  • log::info(...)

  • log::warn(...)

  • log::error(...)

  • log::critical(...)

In particular, a critical log message will

  • try to flush log buffers,

  • write a backtrace to stderr,

  • abort the running process and

  • maybe create a core dump.

There is one more facility

  • log::debug(...)

which will only be included when NDEBUG has not been defined.

Formatting#

The log message itself is being generated by fmt.

Note

We only support std::string_view for the format string. The reason is that generic strings, and char const \* in particular, may imply run-time checking of string length.

Some examples

log::info("Trivial"sv);
log::warn("Latency {} exceeds the threshold of {}"sv, latency, threshold);
log::error(R"(Invalid key="{}")"sv, key);
log::critical("Unexpected"sv);

Verbosity#

Verbosity can be controlled by setting the ROQ_v environment variable

Note

Default verbosity level is 0 (zero).

Some examples

log::info<0>("Same as log::info"sv);
log::info<1>("Will only log when ROQ_v >= 1"sv);
log::info<2>("Will only log when ROQ_v >= 2"sv);

Service#

class Service#

Convenience class to wrap roq::Logger, absl::flags, etc.

Public Functions

int run()#

The main function.

struct Info#

Tool#

class Tool#

Convenience class to wrap roq::Logger, absl::flags, etc.

Public Functions

int run()#

The main function.

struct Info#

Logger#

struct Logger#

Interface to manage the lifetime of the single static logger.

Public Static Functions

static void initialize(std::string_view const &arg0, Config const&, bool stacktrace = true)#

Initialize the logger.

static void shutdown()#

Shutdown the logger.

struct Config#

Config.