Skip to content

1000 deaths handling + much improved sink support

Compare
Choose a tag to compare
@KjellKod KjellKod released this 10 Sep 10:50
· 405 commits to master since this release

With this release g3log will:

1) Gracefully handle aggressive crashing scenarios: Imagine hundreds or throusands of threads starting up and all racing to do a SIGSEGV crash? (On v1.0 that worked fine for Linux/Gcc but for OSX/Clang it did not work well. And the exit of the process could be delayed a very long time)

2) Improved sink construction and logger initialization API. See example a,b,c below
a. Create a logger
std::unique_ptr<LogWorker> logworker{ LogWorker::createLogWorker() }

b) Add of custom sinks (here named "CustomSink")

auto sinkHandle = logworker->addSink(std2::make_unique<CustomSink>(), 
    &CustomSink::ReceiveLogMessage);

c) Add a default file logging sink (more sinks are available at g3sinks)

auto handle= worker->addDefaultLogger(prefix, path_to_log_file);

3) Custom logging levels can be created. Please see g3log/loglevels.hpp for the value ranges
The example will create a logging level "HEY".

const LEVELS  HEY {WARNING.value + 1, {"Hey There"}};
LOG(HEY) << "Hello"

4) A custom pre death hook can be put in place to do custom actions when a fatal event is caught.
This should be set after the initialization of the logger (the initialization will otherwise clear it)

          // example showing a simple LOG(INFO) call but it could really be anything
          // After the hook is called it will be cleared so it can only be called once
         // if you need multiple "death cleanup" calls then the best is to bundle them within the allowed callback
        namespace {
        void  Ooops() {
           LOG(INFO) << "Death is imminent";
        }
        } // namespace

       .... elsewhere in the code 
          g3::setFatalPreLoggingHook(&Ooops);