3#include <g3sinks/LogRotate.h>
4#include <g3sinks/LogRotateWithFilter.h>
6#include <experimental/filesystem>
7#include <g3log/g3log.hpp>
8#include <g3log/loglevels.hpp>
9#include <g3log/logmessage.hpp>
10#include <g3log/logworker.hpp>
12#include "software/logger/coloured_cout_sink.h"
13#include "software/logger/csv_sink.h"
14#include "software/logger/custom_logging_levels.h"
15#include "software/logger/plotjuggler_sink.h"
16#include "software/logger/protobuf_sink.h"
23#define LOG_SELECT(_1, _2, NAME, ...) NAME
24#define LOG(...) LOG_SELECT(__VA_ARGS__, LOG_2, LOG_1)(__VA_ARGS__)
29 if (!g3::logLevel(level)) \
33 INTERNAL_LOG_MESSAGE(level).stream()
36#define LOG_2(level, filename) \
37 if (level != CSV && level != VISUALIZE) \
41 LOG_1(level) << filename \
65 const std::shared_ptr<ProtoLogger>& proto_logger,
66 const bool reduce_repetition =
true)
68 static std::shared_ptr<LoggerSingleton> s(
74 const std::shared_ptr<ProtoLogger>& proto_logger,
75 const bool reduce_repetition)
77 logWorker = g3::LogWorker::createLogWorker();
93 if (!std::experimental::filesystem::exists(runtime_dir))
95 std::experimental::filesystem::create_directories(runtime_dir);
98 auto csv_sink_handle = logWorker->addSink(std::make_unique<CSVSink>(runtime_dir),
101 auto colour_cout_sink_handle = logWorker->addSink(
102 std::make_unique<ColouredCoutSink>(
true, reduce_repetition),
106 auto filtered_log_rotate_sink_handle = logWorker->addSink(
107 std::make_unique<LogRotateWithFilter>(
108 std::make_unique<LogRotate>(log_name + filter_suffix, runtime_dir),
109 filtered_level_filter),
110 &LogRotateWithFilter::save);
112 auto default_log_rotate_sink_handle = logWorker->addSink(
113 std::make_unique<LogRotateWithFilter>(
114 std::make_unique<LogRotate>(log_name, runtime_dir), default_level_filter),
115 &LogRotateWithFilter::save);
118 auto visualization_handle =
119 logWorker->addSink(std::make_unique<ProtobufSink>(runtime_dir, proto_logger),
120 &ProtobufSink::sendProtobuf);
123 auto plotjuggler_handle = logWorker->addSink(std::make_unique<PlotJugglerSink>(),
126 g3::initializeLogging(logWorker.get());
130 std::vector<LEVELS> filtered_level_filter = {DEBUG, VISUALIZE, CSV, INFO,
132 std::vector<LEVELS> default_level_filter = {VISUALIZE, CSV, PLOTJUGGLER};
133 const std::string filter_suffix =
"_filtered";
134 const std::string log_name =
"thunderbots";
135 std::unique_ptr<g3::LogWorker> logWorker;
void appendToFile(g3::LogMessageMover log_entry)
Definition csv_sink.cpp:11
void displayColouredLog(g3::LogMessageMover log_entry)
Definition coloured_cout_sink.cpp:56
static void initializeLogger(const std::string &runtime_dir, const std::shared_ptr< ProtoLogger > &proto_logger, const bool reduce_repetition=true)
Definition logger.h:55
void sendToPlotJuggler(g3::LogMessageMover log_entry)
Definition plotjuggler_sink.cpp:13