1#include "nix-eval/src/logging.rs"2#include "logging.hh"3#include <nix/util/logging.hh>45using namespace nix;67struct TracingLogger : Logger {8 TracingLogger() {}910 bool isVerbose() override { return true; }11 void log(Verbosity lvl, std::string_view s) override {12 rust::Slice<const unsigned char> str(13 reinterpret_cast<const unsigned char *>(s.data()), s.size());14 emit_log(lvl, str);15 }16 void logEI(const ErrorInfo &ei) override {17 auto s = ei.msg.str();18 rust::Slice<const unsigned char> str(19 reinterpret_cast<const unsigned char *>(s.data()), s.size());20 emit_log(ei.level, str);21 }2223 void startActivity(ActivityId act, Verbosity lvl, ActivityType type,24 const std::string &s, const Fields &fields,25 ActivityId parent) override {26 auto b = new_start_activity(act, lvl, type);27 for (auto &f : fields) {28 if (f.type == Logger::Field::tInt) {29 b->add_int_field(f.i);30 } else if (f.type == Logger::Field::tString) {31 auto s = &f.s;32 rust::Slice<const unsigned char> str(33 reinterpret_cast<const unsigned char *>(s->data()), s->size());34 b->add_string_field(str);35 } else {36 unreachable();37 }38 }39 b->emit(parent, s);40 };4142 void stopActivity(ActivityId act) override { emit_stop(act); };4344 void result(ActivityId act, ResultType type, const Fields &fields) override {45 auto b = new_start_activity(act, 0, type);46 for (auto &f : fields) {47 if (f.type == Logger::Field::tInt) {48 b->add_int_field(f.i);49 } else if (f.type == Logger::Field::tString) {50 auto s = &f.s;51 rust::Slice<const unsigned char> str(52 reinterpret_cast<const unsigned char *>(s->data()), s->size());53 b->add_string_field(str);54 } else {55 unreachable();56 }57 }58 b->emit_result(type);59 };6061 void writeToStdout(std::string_view s) override {62 emit_warn("writeToStdout() called, but unsupported");63 }64 void warn(const std::string &msg) override { emit_warn(msg); }6566 virtual std::optional<char> ask(std::string_view s) {67 emit_warn("ask() called, but unsupported");68 return {};69 }70};7172extern "C" {73void apply_tracing_logger() {74 logger = std::make_unique<TracingLogger>();75 // verbosity = lvlVomit;76}77}