Skip to content

Commit 6f8b168

Browse files
author
Steve Lee (POWERSHELL HE/HIM) (from Dev Box)
committed
Fix tracing pass-through structure
1 parent c1f2eb9 commit 6f8b168

2 files changed

Lines changed: 35 additions & 31 deletions

File tree

dsc/tests/dsc_tracing.tests.ps1

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,13 +89,32 @@ Describe 'tracing tests' {
8989

9090
It 'Pass-through tracing should only emit JSON for child processes' {
9191
$logPath = "$TestDrive/dsc_trace.log"
92-
$out = dsc -l info -t pass-through config get -f ../examples/groups.dsc.yaml 2> $logPath
92+
$out = dsc -l trace -t pass-through config get -f "$PSScriptRoot/../examples/groups.dsc.yaml" 2> $logPath
93+
$LASTEXITCODE | Should -Be 0 -Because (Get-Content -Path $logPath -Raw)
94+
$foundPID = $false
95+
$foundTarget = $false
96+
$foundLineNumber = $false
9397
foreach ($line in (Get-Content $logPath)) {
9498
$line | Should -Not -BeNullOrEmpty
9599
$json = $line | ConvertFrom-Json
96-
$json.timestamp | Should -Not -BeNullOrEmpty
100+
$json.timestamp | Should -Not -BeNullOrEmpty -Because "Line: $line"
97101
$json.level | Should -BeIn 'ERROR', 'WARN', 'INFO', 'DEBUG', 'TRACE'
102+
$json.fields.message | Should -Not -BeNullOrEmpty -Because "Line: $line"
103+
if ($json.fields.pid) {
104+
$json.fields.pid | Should -BeGreaterThan 0 -Because "Line: $line"
105+
$foundPID = $true
106+
}
107+
if ($json.fields.target) {
108+
$foundTarget = $true
109+
}
110+
if ($json.fields.line_number) {
111+
$json.fields.line_number | Should -BeGreaterThan 0 -Because "Line: $line"
112+
$foundLineNumber = $true
113+
}
98114
}
99-
$out | Should -BeNullOrEmpty
115+
$foundTarget | Should -BeTrue -Because "No target found in log"
116+
$foundLineNumber | Should -BeTrue -Because "No line number found in log"
117+
$foundPID | Should -BeTrue -Because "No PID found in log"
118+
$out | Should -Not -BeNullOrEmpty
100119
}
101120
}

dsc_lib/src/dscresources/command_resource.rs

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -862,57 +862,42 @@ pub fn log_stderr_line<'a>(process_id: &u32, trace_line: &'a str) -> &'a str
862862
if !trace_line.is_empty()
863863
{
864864
if let Ok(trace_object) = serde_json::from_str::<Trace>(trace_line) {
865-
let mut include_target = trace_object.level == TraceLevel::Debug || trace_object.level == TraceLevel::Trace;
866-
let target = if let Some(t) = trace_object.target.as_deref() { t } else {
867-
include_target = false;
868-
""
869-
};
870-
let line_number = if let Some(l) = trace_object.line_number { l } else {
871-
include_target = false;
872-
0
873-
};
874-
let trace_message = if include_target {
875-
format!("PID {process_id}: {target}: {line_number}: {}", trace_object.fields.message)
876-
} else {
877-
format!("PID {process_id}: {}", trace_object.fields.message)
878-
};
879865
match trace_object.level {
880866
TraceLevel::Error => {
881-
error!(trace_message);
867+
error!(message = trace_object.fields.message, pid = process_id, target = trace_object.target, line_number = trace_object.line_number);
882868
},
883869
TraceLevel::Warn => {
884-
warn!(trace_message);
870+
warn!(message = trace_object.fields.message, pid = process_id, target = trace_object.target, line_number = trace_object.line_number);
885871
},
886872
TraceLevel::Info => {
887-
info!(trace_message);
873+
info!(message = trace_object.fields.message, pid = process_id, target = trace_object.target, line_number = trace_object.line_number);
888874
},
889875
TraceLevel::Debug => {
890-
debug!(trace_message);
876+
debug!(message = trace_object.fields.message, pid = process_id, target = trace_object.target, line_number = trace_object.line_number);
891877
},
892878
TraceLevel::Trace => {
893-
trace!(trace_message);
879+
trace!(message = trace_object.fields.message, pid = process_id, target = trace_object.target, line_number = trace_object.line_number);
894880
},
895881
}
896-
}
897-
else if let Ok(json_obj) = serde_json::from_str::<Value>(trace_line) {
882+
} else if let Ok(json_obj) = serde_json::from_str::<Value>(trace_line) {
898883
if let Some(msg) = json_obj.get("error") {
899-
error!("PID {process_id}: {}", msg.as_str().unwrap_or_default());
884+
error!(message = msg.as_str().unwrap_or_default(), pid = process_id);
900885
} else if let Some(msg) = json_obj.get("warn") {
901-
warn!("PID {process_id}: {}", msg.as_str().unwrap_or_default());
886+
warn!(message = msg.as_str().unwrap_or_default(), pid = process_id);
902887
} else if let Some(msg) = json_obj.get("info") {
903-
info!("PID {process_id}: {}", msg.as_str().unwrap_or_default());
888+
info!(message = msg.as_str().unwrap_or_default(), pid = process_id);
904889
} else if let Some(msg) = json_obj.get("debug") {
905-
debug!("PID {process_id}: {}", msg.as_str().unwrap_or_default());
890+
debug!(message = msg.as_str().unwrap_or_default(), pid = process_id);
906891
} else if let Some(msg) = json_obj.get("trace") {
907-
trace!("PID {process_id}: {}", msg.as_str().unwrap_or_default());
892+
trace!(message = msg.as_str().unwrap_or_default(), pid = process_id);
908893
} else {
909894
// the line is a valid json, but not one of standard trace lines - return it as filtered stderr_line
910-
trace!("PID {process_id}: {trace_line}");
895+
trace!(message = trace_line, pid = process_id);
911896
return trace_line;
912897
}
913898
} else {
914899
// the line is not a valid json - return it as filtered stderr_line
915-
trace!("PID {process_id}: {}", trace_line);
900+
trace!(message = trace_line, pid = process_id);
916901
return trace_line;
917902
}
918903
}

0 commit comments

Comments
 (0)