MCPcopy Create free account
hub / github.com/PowerShell/DSC / log_stderr_line

Function log_stderr_line

lib/dsc-lib/src/dscresources/command_resource.rs:1181–1242  ·  view source on GitHub ↗

Log output from a process as traces. # Arguments `process_name` - The name of the process `process_id` - The ID of the process `trace_line` - The stderr line from the process

(process_id: &u32, trace_line: &'a str)

Source from the content-addressed store, hash-verified

1179/// * `process_id` - The ID of the process
1180/// * `trace_line` - The stderr line from the process
1181pub fn log_stderr_line<'a>(process_id: &u32, trace_line: &'a str) -> &'a str
1182{
1183 if !trace_line.is_empty()
1184 {
1185 if let Ok(trace_object) = serde_json::from_str::<Trace>(trace_line) {
1186 let mut include_target = trace_object.level == TraceLevel::Debug || trace_object.level == TraceLevel::Trace;
1187 let target = if let Some(t) = trace_object.target.as_deref() { t } else {
1188 include_target = false;
1189 ""
1190 };
1191 let line_number = if let Some(l) = trace_object.line_number { l } else {
1192 include_target = false;
1193 0
1194 };
1195 let trace_message = if include_target {
1196 format!("PID {process_id}: {target}: {line_number}: {}", trace_object.fields.message)
1197 } else {
1198 format!("PID {process_id}: {}", trace_object.fields.message)
1199 };
1200 match trace_object.level {
1201 TraceLevel::Error => {
1202 error!(trace_message);
1203 },
1204 TraceLevel::Warn => {
1205 warn!(trace_message);
1206 },
1207 TraceLevel::Info => {
1208 info!(trace_message);
1209 },
1210 TraceLevel::Debug => {
1211 debug!(trace_message);
1212 },
1213 TraceLevel::Trace => {
1214 trace!(trace_message);
1215 },
1216 }
1217 }
1218 else if let Ok(json_obj) = serde_json::from_str::<Value>(trace_line) {
1219 if let Some(msg) = json_obj.get("error") {
1220 error!("PID {process_id}: {}", msg.as_str().unwrap_or_default());
1221 } else if let Some(msg) = json_obj.get("warn") {
1222 warn!("PID {process_id}: {}", msg.as_str().unwrap_or_default());
1223 } else if let Some(msg) = json_obj.get("info") {
1224 info!("PID {process_id}: {}", msg.as_str().unwrap_or_default());
1225 } else if let Some(msg) = json_obj.get("debug") {
1226 debug!("PID {process_id}: {}", msg.as_str().unwrap_or_default());
1227 } else if let Some(msg) = json_obj.get("trace") {
1228 trace!("PID {process_id}: {}", msg.as_str().unwrap_or_default());
1229 } else {
1230 // the line is a valid json, but not one of standard trace lines - return it as filtered stderr_line
1231 trace!("PID {process_id}: {trace_line}");
1232 return trace_line;
1233 }
1234 } else {
1235 // the line is not a valid json - return it as filtered stderr_line
1236 trace!("PID {process_id}: {}", trace_line);
1237 return trace_line;
1238 }

Callers 1

run_process_asyncFunction · 0.85

Calls 2

is_emptyMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected