Skip to content
/ kern Public

Simple modular C++ logging library inspired by the Rust crate fern

License

Notifications You must be signed in to change notification settings

tsurai/kern

Repository files navigation

kern Build Status Build status codecov

Simple C++ logging library using a branching method chaining interface inspired by the Rust crate fern.

#include <kern/kern.h>

DispatchBuilder()
    // accept messages for all level
    .sink(std::make_unique<StdoutSink>())
    .chain(DispatchBuilder()
        .level(LogLevel::Trace)
        // use additional debug informations for trace messages
        .format([](auto meta, auto msg, auto buf) {
            snprintf(buf, BUF_SIZE, "[%s] %s:%d | %s", meta.level_str, meta.function, meta.line, msg);
        })
        .sink(std::make_unique<FileSink>("/var/log/foobar.trace"))
        .build())
    // write error and fatal messages to stdout and stderr
    .chain(DispatchBuilder()
        .min_level(LogLevel::Error)
        .sink(std::make_unique<StderrSink>())
        // additionaly write error messages into a log file
        .chain(DispatchBuilder()
            .sink(std::make_unique<FileSink>("/var/log/foobar.err"))
            .build())
        .build())
    // filter all messages previously caught by a chain dispatch
    .filter_chains()
    .apply();

info("foo");
error("bar");
trace("baz %d %s", 6, "foobar");

How to use

Testing

kern is using parts of the catch unit-testing framework for internal testing. All necessary files are being distributed with kern and can be found in the tests/catch subdirectory. Catch is licensed under the Boost Software License 1.0