difftreelog
fix logs may contain non-utf8 lines, use lossy conversion
in: trunk
2 files changed
crates/nix-eval/src/logging.ccdiffbeforeafterboth9910 bool isVerbose() override { return true; }10 bool isVerbose() override { return true; }11 void log(Verbosity lvl, std::string_view s) override {11 void log(Verbosity lvl, std::string_view s) override {12 rust::Str str(s.data(), s.size());12 rust::Slice<const unsigned char> str(reinterpret_cast<const unsigned char*>(s.data()), s.size());13 emit_log(lvl, str);13 emit_log(lvl, str);14 }14 }15 void logEI(const ErrorInfo &ei) override { emit_log(ei.level, ei.msg.str()); }15 void logEI(const ErrorInfo &ei) override {16 auto s = ei.msg.str();17 rust::Slice<const unsigned char> str(reinterpret_cast<const unsigned char*>(s.data()), s.size());18 emit_log(ei.level, str);19 }162017 void startActivity(ActivityId act, Verbosity lvl, ActivityType type,21 void startActivity(ActivityId act, Verbosity lvl, ActivityType type,22 if (f.type == Logger::Field::tInt) {26 if (f.type == Logger::Field::tInt) {23 b->add_int_field(f.i);27 b->add_int_field(f.i);24 } else if (f.type == Logger::Field::tString) {28 } else if (f.type == Logger::Field::tString) {29 auto s = &f.s;30 rust::Slice<const unsigned char> str(reinterpret_cast<const unsigned char*>(s->data()), s->size());25 b->add_string_field(f.s);31 b->add_string_field(str);26 } else {32 } else {27 unreachable();33 unreachable();28 }34 }38 if (f.type == Logger::Field::tInt) {44 if (f.type == Logger::Field::tInt) {39 b->add_int_field(f.i);45 b->add_int_field(f.i);40 } else if (f.type == Logger::Field::tString) {46 } else if (f.type == Logger::Field::tString) {47 auto s = &f.s;48 rust::Slice<const unsigned char> str(reinterpret_cast<const unsigned char*>(s->data()), s->size());41 b->add_string_field(f.s);49 b->add_string_field(str);42 } else {50 } else {43 unreachable();51 unreachable();44 }52 }crates/nix-eval/src/logging.rsdiffbeforeafterboth300 fn add_int_field(&mut self, i: i32) {300 fn add_int_field(&mut self, i: i32) {301 self.fields.push(FieldValue::Int(i));301 self.fields.push(FieldValue::Int(i));302 }302 }303 fn add_string_field(&mut self, v: &str) {303 fn add_string_field(&mut self, v: &[u8]) {304 let v = String::from_utf8_lossy(v);304 self.fields.push(FieldValue::Str(v.to_owned()));305 self.fields.push(FieldValue::Str(v.to_string()));305 }306 }306 fn emit(&mut self, parent: u64, s: &str) {307 fn emit(&mut self, parent: u64, s: &str) {307 let mut mapping = NIX_SPAN_MAPPING.lock().expect("not poisoned");308 let mut mapping = NIX_SPAN_MAPPING.lock().expect("not poisoned");455 let mut mapping = NIX_SPAN_MAPPING.lock().expect("not poisoned");456 let mut mapping = NIX_SPAN_MAPPING.lock().expect("not poisoned");456 mapping.remove(&v);457 mapping.remove(&v);457}458}458fn emit_log(lvl: u32, v: &str) {459fn emit_log(lvl: u32, v: &[u8]) {459 let verbosity = Verbosity::from_int(lvl);460 let verbosity = Verbosity::from_int(lvl);460 let level: Level = verbosity.into();461 let level: Level = verbosity.into();462 let v = String::from_utf8_lossy(v);461 if level == Level::ERROR {463 if level == Level::ERROR {462 error!(target: "nix", "{v}")464 error!(target: "nix", "{v}")463 } else if level == Level::WARN {465 } else if level == Level::WARN {539 type StartActivityBuilder;541 type StartActivityBuilder;540 fn new_start_activity(activity_id: u64, lvl: u32, typ: u32) -> Box<StartActivityBuilder>;542 fn new_start_activity(activity_id: u64, lvl: u32, typ: u32) -> Box<StartActivityBuilder>;541 fn add_int_field(&mut self, i: i32);543 fn add_int_field(&mut self, i: i32);542 fn add_string_field(&mut self, v: &str);544 fn add_string_field(&mut self, v: &[u8]);543 fn emit(&mut self, parent: u64, s: &str);545 fn emit(&mut self, parent: u64, s: &str);544 fn emit_result(&mut self, ty: u32);546 fn emit_result(&mut self, ty: u32);545547546 fn emit_warn(v: &str);548 fn emit_warn(v: &str);547 fn emit_stop(id: u64);549 fn emit_stop(id: u64);548 fn emit_log(lvl: u32, v: &str);550 fn emit_log(lvl: u32, v: &[u8]);549 }551 }550 unsafe extern "C++" {552 unsafe extern "C++" {551 include!("nix-eval/src/logging.hh");553 include!("nix-eval/src/logging.hh");