vector/internal_events/
template.rs1use metrics::counter;
2use vector_lib::NamedInternalEvent;
3use vector_lib::internal_event::{
4 ComponentEventsDropped, InternalEvent, UNINTENTIONAL, error_stage, error_type,
5};
6
7#[derive(NamedInternalEvent)]
8pub struct TemplateRenderingError<'a> {
9 pub field: Option<&'a str>,
10 pub drop_event: bool,
11 pub error: crate::template::TemplateRenderingError,
12}
13
14impl InternalEvent for TemplateRenderingError<'_> {
15 fn emit(self) {
16 let mut msg = "Failed to render template".to_owned();
17 if let Some(field) = self.field {
18 use std::fmt::Write;
19 _ = write!(msg, " for \"{field}\"");
20 }
21 msg.push('.');
22
23 if self.drop_event {
24 error!(
25 message = %msg,
26 error = %self.error,
27 error_type = error_type::TEMPLATE_FAILED,
28 stage = error_stage::PROCESSING,
29 );
30
31 counter!(
32 "component_errors_total",
33 "error_type" => error_type::TEMPLATE_FAILED,
34 "stage" => error_stage::PROCESSING,
35 )
36 .increment(1);
37
38 emit!(ComponentEventsDropped::<UNINTENTIONAL> {
39 count: 1,
40 reason: "Failed to render template.",
41 });
42 } else {
43 warn!(
44 message = %msg,
45 error = %self.error,
46 error_type = error_type::TEMPLATE_FAILED,
47 stage = error_stage::PROCESSING,
48 );
49 }
50 }
51}