@@ -5,8 +5,11 @@ import (
5
5
"encoding/json"
6
6
"errors"
7
7
"fmt"
8
+ "log/slog"
8
9
"net/http"
9
10
"net/url"
11
+ "reflect"
12
+ "runtime"
10
13
"sync"
11
14
"sync/atomic"
12
15
"time"
@@ -362,34 +365,48 @@ func (l *nGCPLogger) extractMsgFromPayload(m map[string]any) {
362
365
}
363
366
}
364
367
368
+ func assertOrLog [T any ](val any ) T {
369
+ var v T
370
+ var ok bool
371
+ v , ok = val .(T )
372
+ if ! ok {
373
+ _ , file , line , ok := runtime .Caller (1 )
374
+ if ! ok {
375
+ file = "unknown"
376
+ }
377
+ slog .Error ("unexpected type" , "want" , reflect .TypeOf (v ).String (), "got" , reflect .TypeOf (val ).String (), "file" , file , "line" , line )
378
+ }
379
+ return v
380
+ }
381
+
365
382
func (l * nGCPLogger ) extractGcpFromPayload (m map [string ]any , entry * logging.Entry ) {
366
383
367
384
if l .extractGcp {
368
385
if val , exists := m ["logging.googleapis.com/sourceLocation" ]; exists {
369
- v := val .( map [string ]any )
386
+ v := assertOrLog [ map [string ]any ]( val )
370
387
entry .SourceLocation = & loggingpb.LogEntrySourceLocation {
371
- File : v ["file" ].( string ),
372
- Line : int64 (v ["line" ].( float64 )),
373
- Function : v ["function" ].( string ),
388
+ File : assertOrLog [ string ]( v ["file" ]),
389
+ Line : int64 (assertOrLog [ float64 ]( v ["line" ])),
390
+ Function : assertOrLog [ string ]( v ["function" ]),
374
391
}
375
392
delete (m , "logging.googleapis.com/sourceLocation" )
376
393
}
377
394
if val , exists := m ["logging.googleapis.com/trace" ]; exists {
378
- entry .Trace = val .( string )
395
+ entry .Trace = assertOrLog [ string ]( val )
379
396
delete (m , "logging.googleapis.com/trace" )
380
397
}
381
398
if val , exists := m ["logging.googleapis.com/spanId" ]; exists {
382
- entry .SpanID = val .( string )
399
+ entry .SpanID = assertOrLog [ string ]( val )
383
400
delete (m , "logging.googleapis.com/spanId" )
384
401
}
385
402
if val , exists := m ["logging.googleapis.com/trace_sampled" ]; exists {
386
- entry .TraceSampled = val .( bool )
403
+ entry .TraceSampled = assertOrLog [ bool ]( val )
387
404
delete (m , "logging.googleapis.com/trace_sampled" )
388
405
}
389
406
if val , exists := m ["logging.googleapis.com/labels" ]; exists {
390
- v := val .( map [string ]any )
407
+ v := assertOrLog [ map [string ]any ]( val )
391
408
for k , v := range v {
392
- entry .Labels [k ] = v .( string )
409
+ entry .Labels [k ] = assertOrLog [ string ]( v )
393
410
}
394
411
delete (m , "logging.googleapis.com/labels" )
395
412
}
0 commit comments