@@ -86,49 +86,66 @@ func eventToLogs(event interface{}, config *Config, ghClient *github.Client, log
86
86
jobLogsScope .Scope ().Attributes ().PutStr ("ci.github.workflow.job.name" , jobName )
87
87
88
88
for _ , logFile := range files {
89
+ if ! strings .HasPrefix (logFile .Name , jobName ) {
90
+ continue
91
+ }
89
92
90
- if strings .HasPrefix (logFile .Name , jobName ) {
91
- fileNameWithoutDir := strings .Replace (logFile .Name , jobName + "/" , "" , 1 )
92
- stepNumber , _ := strconv .Atoi (strings .Split (fileNameWithoutDir , "_" )[0 ])
93
+ fileNameWithoutDir := strings .TrimPrefix (logFile .Name , jobName + "/" )
94
+ stepNumberStr := strings .Split (fileNameWithoutDir , "_" )[0 ]
95
+ stepNumber , err := strconv .Atoi (stepNumberStr )
96
+ if err != nil {
97
+ logger .Error ("Invalid step number" , zap .String ("stepNumberStr" , stepNumberStr ), zap .Error (err ))
98
+ continue
99
+ }
93
100
94
- spanID , _ := generateStepSpanID (e .GetWorkflowRun ().GetID (), e .GetWorkflowRun ().GetRunAttempt (), jobName , int64 (stepNumber ))
101
+ spanID , err := generateStepSpanID (e .GetWorkflowRun ().GetID (), e .GetWorkflowRun ().GetRunAttempt (), jobName , int64 (stepNumber ))
102
+ if err != nil {
103
+ logger .Error ("Failed to generate span ID" , zap .Error (err ))
104
+ continue
105
+ }
95
106
96
- ff , err := logFile .Open ()
97
- if err != nil {
98
- logger .Error ("Failed to open file" , zap .Error (err ))
99
- break
107
+ ff , err := logFile .Open ()
108
+ if err != nil {
109
+ logger .Error ("Failed to open file" , zap .Error (err ))
110
+ continue
111
+ }
112
+ defer ff .Close ()
113
+
114
+ scanner := bufio .NewScanner (ff )
115
+ for scanner .Scan () {
116
+ lineText := scanner .Text ()
117
+ if lineText == "" {
118
+ logger .Debug ("Skipping empty line" )
119
+ continue
100
120
}
101
121
102
- scanner := bufio .NewScanner (ff )
103
- for scanner .Scan () {
104
- record := jobLogsScope .LogRecords ().AppendEmpty ()
105
-
106
- if withTraceInfo {
107
- record .SetSpanID (spanID )
108
- record .SetTraceID (traceID )
109
- }
110
-
111
- record .Attributes ().PutInt ("ci.github.workflow.job.step.number" , int64 (stepNumber ))
112
-
113
- now := pcommon .NewTimestampFromTime (time .Now ())
114
-
115
- ts , line , _ := strings .Cut (scanner .Text (), " " )
116
- parsedTime , _ := time .Parse (time .RFC3339 , ts )
117
-
118
- record .SetObservedTimestamp (now )
119
- record .SetTimestamp (pcommon .NewTimestampFromTime (parsedTime ))
122
+ ts , line , ok := strings .Cut (lineText , " " )
123
+ if ! ok {
124
+ logger .Error ("Failed to cut log line" , zap .String ("body" , lineText ))
125
+ continue
126
+ }
120
127
121
- record .Body ().SetStr (line )
128
+ parsedTime , err := time .Parse (time .RFC3339 , ts )
129
+ if err != nil {
130
+ logger .Error ("Failed to parse timestamp" , zap .String ("timestamp" , ts ), zap .Error (err ))
131
+ continue
122
132
}
123
- ff .Close ()
124
133
125
- if err := scanner .Err (); err != nil {
126
- logger .Error ("error reading file" , zap .Error (err ))
134
+ record := jobLogsScope .LogRecords ().AppendEmpty ()
135
+ if withTraceInfo {
136
+ record .SetSpanID (spanID )
137
+ record .SetTraceID (traceID )
127
138
}
139
+ record .Attributes ().PutInt ("ci.github.workflow.job.step.number" , int64 (stepNumber ))
140
+ record .SetTimestamp (pcommon .NewTimestampFromTime (parsedTime ))
141
+ record .SetObservedTimestamp (pcommon .NewTimestampFromTime (time .Now ()))
142
+ record .Body ().SetStr (line )
143
+ }
128
144
145
+ if err := scanner .Err (); err != nil {
146
+ logger .Error ("Error reading file" , zap .Error (err ))
129
147
}
130
148
}
131
-
132
149
}
133
150
134
151
return & logs , nil
0 commit comments