@@ -5,12 +5,11 @@ package azure // import "github.com/open-telemetry/opentelemetry-collector-contr
55
66import (
77 "bytes"
8- "encoding/json"
98 "errors"
109 "strconv"
1110 "time"
1211
13- jsoniter "github.com/json-iterator /go"
12+ "github.com/goccy /go-json "
1413 "github.com/relvacode/iso8601"
1514 "go.opentelemetry.io/collector/pdata/pcommon"
1615 "go.opentelemetry.io/collector/pdata/plog"
@@ -64,7 +63,7 @@ type azureLogRecord struct {
6463 CallerIPAddress * string `json:"callerIpAddress"`
6564 CorrelationID * string `json:"correlationId"`
6665 Identity * any `json:"identity"`
67- Level * json. Number `json:"Level"`
66+ Level any `json:"Level"`
6867 Location * string `json:"location"`
6968 Properties * any `json:"properties"`
7069}
@@ -81,7 +80,7 @@ func (r ResourceLogsUnmarshaler) UnmarshalLogs(buf []byte) (plog.Logs, error) {
8180 l := plog .NewLogs ()
8281
8382 var azureLogs azureRecords
84- decoder := jsoniter .NewDecoder (bytes .NewReader (buf ))
83+ decoder := json .NewDecoder (bytes .NewReader (buf ))
8584 if err := decoder .Decode (& azureLogs ); err != nil {
8685 return l , err
8786 }
@@ -118,9 +117,14 @@ func (r ResourceLogsUnmarshaler) UnmarshalLogs(buf []byte) (plog.Logs, error) {
118117 lr .SetTimestamp (nanos )
119118
120119 if log .Level != nil {
121- severity := asSeverity (* log .Level )
120+ severity := asSeverity (log .Level )
122121 lr .SetSeverityNumber (severity )
123- lr .SetSeverityText (log .Level .String ())
122+ switch s := log .Level .(type ) {
123+ case string :
124+ lr .SetSeverityText (s )
125+ case float64 :
126+ lr .SetSeverityText (strconv .FormatFloat (s , 'f' , - 1 , 64 ))
127+ }
124128 }
125129
126130 if err := lr .Attributes ().FromRaw (extractRawAttributes (log )); err != nil {
@@ -165,22 +169,27 @@ func asTimestamp(s string, formats ...string) (pcommon.Timestamp, error) {
165169// asSeverity converts the Azure log level to equivalent
166170// OpenTelemetry severity numbers. If the log level is not
167171// valid, then the 'Unspecified' value is returned.
168- func asSeverity (number json. Number ) plog.SeverityNumber {
169- switch number .String ( ) {
170- case "Informational" :
171- return plog . SeverityNumberInfo
172- case "Warning " :
173- return plog .SeverityNumberWarn
174- case "Error " :
175- return plog .SeverityNumberError
176- case "Critical " :
177- return plog .SeverityNumberFatal
178- default :
179- levelNumber , _ := number . Int64 ()
180- if levelNumber > 0 {
181- return plog .SeverityNumber ( levelNumber )
172+ func asSeverity (number any ) plog.SeverityNumber {
173+ switch l := number .( type ) {
174+ case string :
175+ switch l {
176+ case "Informational " :
177+ return plog .SeverityNumberInfo
178+ case "Warning " :
179+ return plog .SeverityNumberWarn
180+ case "Error " :
181+ return plog .SeverityNumberError
182+ case "Critical" :
183+ return plog . SeverityNumberFatal
184+ default :
185+ return plog .SeverityNumberUnspecified
182186 }
183-
187+ case float64 :
188+ if l > 0 {
189+ return plog .SeverityNumber (l )
190+ }
191+ return plog .SeverityNumberUnspecified
192+ default :
184193 return plog .SeverityNumberUnspecified
185194 }
186195}
0 commit comments