diff --git a/scripts/base/frameworks/broker/log.zeek b/scripts/base/frameworks/broker/log.zeek index 73812442a7..c77fd59087 100644 --- a/scripts/base/frameworks/broker/log.zeek +++ b/scripts/base/frameworks/broker/log.zeek @@ -95,3 +95,28 @@ event Broker::error(code: ErrorCode, msg: string) Reporter::error(fmt("Broker error (%s): %s", code, msg)); } +event Broker::internal_log_event(lvl: LogSeverityLevel, id: string, description: string) + { + local severity = Broker::CRITICAL_EVENT; + switch lvl { + case Broker::LOG_ERROR: + severity = Broker::ERROR; + break; + case Broker::LOG_WARNING: + severity = Broker::WARNING_EVENT; + break; + case Broker::LOG_INFO: + severity = Broker::INFO_EVENT; + break; + case Broker::LOG_VERBOSE: + severity = Broker::VERBOSE_EVENT; + break; + case Broker::LOG_DEBUG: + severity = Broker::DEBUG_EVENT; + break; + } + Log::write(Broker::LOG, [$ts = network_time(), + $ty = severity, + $ev = id, + $message = description]); + } diff --git a/src/broker/Manager.cc b/src/broker/Manager.cc index 54d295f488..fb04d30c17 100644 --- a/src/broker/Manager.cc +++ b/src/broker/Manager.cc @@ -1135,14 +1135,12 @@ EnumValPtr lookup_enum_val(const char* module_name, const char* name) { } // namespace void Manager::ProcessLogEvents() { - static auto plval = lookup_enum_val("Broker", "LOG"); - static auto lpli = id::find_type("Broker::Info"); - static auto ev_critical = lookup_enum_val("Broker", "CRITICAL_EVENT"); - static auto ev_error = lookup_enum_val("Broker", "ERROR_EVENT"); - static auto ev_warning = lookup_enum_val("Broker", "WARNING_EVENT"); - static auto ev_info = lookup_enum_val("Broker", "INFO_EVENT"); - static auto ev_verbose = lookup_enum_val("Broker", "VERBOSE_EVENT"); - static auto ev_debug = lookup_enum_val("Broker", "DEBUG_EVENT"); + static auto ev_critical = lookup_enum_val("Broker", "LOG_CRITICAL"); + static auto ev_error = lookup_enum_val("Broker", "LOG_ERROR"); + static auto ev_warning = lookup_enum_val("Broker", "LOG_WARNING"); + static auto ev_info = lookup_enum_val("Broker", "LOG_INFO"); + static auto ev_verbose = lookup_enum_val("Broker", "LOG_VERBOSE"); + static auto ev_debug = lookup_enum_val("Broker", "LOG_DEBUG"); auto evType = [](BrokerSeverityLevel lvl) { switch ( lvl ) { @@ -1161,14 +1159,12 @@ void Manager::ProcessLogEvents() { for ( auto& event : events ) { auto severity = event->severity; if ( bstate->logSeverity >= severity ) { - auto record = make_intrusive(lpli); - record->AssignTime(0, run_state::network_time); - record->Assign(1, evType(event->severity)); - auto ev = make_intrusive(event->identifier); - record->Assign(2, ev); - auto msg = make_intrusive(event->description); - record->Assign(4, msg); - log_mgr->Write(plval.get(), record.get()); + auto args = Args{}; + args.reserve(3); + args.emplace_back(evType(severity)); + args.emplace_back(make_intrusive(event->identifier)); + args.emplace_back(make_intrusive(event->description)); + event_mgr.Enqueue(::Broker::internal_log_event, std::move(args)); } if ( bstate->stderrSeverity >= severity ) { fprintf(stderr, "[BROKER/%s] %s\n", severity_names_tbl[static_cast(severity)], diff --git a/src/broker/comm.bif b/src/broker/comm.bif index 5cc2e89f8c..81f1114a22 100644 --- a/src/broker/comm.bif +++ b/src/broker/comm.bif @@ -7,6 +7,15 @@ module Broker; +## Generated when Broker emits an internal logging event. +## +## lvl: the severity of the event as reported by Broker. +## +## id: an identifier for the event type. +## +## description: a message providing additional context. +event Broker::internal_log_event%(lvl: LogSeverityLevel, id: string, description: string%); + ## Generated when a new peering has been established. Both sides of the peering ## receive this event, created independently in each endpoint. For the endpoint ## establishing the peering, the added endpoint's network information will match