Open
Description
Description
Trying to log interface for not-nil type with nil value produces panic here
https://github.com/m1heng/opentelemetry-go-contrib/blob/224e5c4eade69ff72355bfd4059f3acbdff34ebe/bridges/otelzap/encoder.go#L325
Similar to #6235
Environment
- OS: any
- Architecture: any
- Go Version: 1.23
go.opentelemetry.io/contrib
version: I don't know
Steps To Reproduce
package main
import (
"context"
"fmt"
"go.opentelemetry.io/contrib/bridges/otelzap"
"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc"
"go.opentelemetry.io/otel/sdk/log"
"go.uber.org/zap"
)
func main() {
exporter, err := otlploggrpc.New(
context.Background(), // literally unused param
otlploggrpc.WithEndpoint("localhost:8201"),
otlploggrpc.WithInsecure(),
)
if err != nil {
panic(err)
}
processor := log.NewBatchProcessor(exporter)
loggerProvider := log.NewLoggerProvider(log.WithProcessor(processor))
otelCore := otelzap.NewCore("otel", otelzap.WithLoggerProvider(loggerProvider))
logger := zap.New(otelCore)
logger.Info("hello world")
var pointer *string
var nilInterface interface{}
fmt.Println(nilInterface, nilInterface == nil)
nilInterface = pointer
fmt.Println(nilInterface, nilInterface == nil)
logger.Info("try log array", zap.Any("array", []any{1, 2, 3, nilInterface}))
}
<nil> true
<nil> false
panic: reflect: call of reflect.Value.Interface on zero Value
goroutine 1 [running]:
reflect.valueInterface({0x0?, 0x0?, 0x0?}, 0x0?)
/Users/levdik/.ya/tools/v4/8427538159/src/reflect/value.go:1489 +0xfc
reflect.Value.Interface(...)
/Users/levdik/.ya/tools/v4/8427538159/src/reflect/value.go:1484
go.opentelemetry.io/contrib/bridges/otelzap.convertValue({0x1032bc980, 0x0})
/Users/levdik/arcadia/vendor/go.opentelemetry.io/contrib/bridges/otelzap/encoder.go:328 +0x3e4
go.opentelemetry.io/contrib/bridges/otelzap.convertValue({0x1032cb280, 0x1400000ca80})
/Users/levdik/arcadia/vendor/go.opentelemetry.io/contrib/bridges/otelzap/encoder.go:305 +0x4c4
go.opentelemetry.io/contrib/bridges/otelzap.(*objectEncoder).AddReflected(0x14000031380, {0x103191fca, 0x5}, {0x1032cb280?, 0x1400000ca80?})
/Users/levdik/arcadia/vendor/go.opentelemetry.io/contrib/bridges/otelzap/encoder.go:124 +0x3c
go.uber.org/zap/zapcore.Field.AddTo({{0x103191fca, 0x5}, 0x17, 0x0, {0x0, 0x0}, {0x1032cb280, 0x1400000ca80}}, {0x1033e3180, 0x14000031380})
/Users/levdik/arcadia/vendor/go.uber.org/zap/zapcore/field.go:170 +0x664
go.opentelemetry.io/contrib/bridges/otelzap.convertField({0x14000111080, 0x1, 0x0?})
/Users/levdik/arcadia/vendor/go.opentelemetry.io/contrib/bridges/otelzap/core.go:226 +0x16c
go.opentelemetry.io/contrib/bridges/otelzap.(*Core).Write(0x1400004c7e0, {0x0, {0xc1ff004ed1e8b780, 0x462f74, 0x1037ea4c0}, {0x0, 0x0}, {0x1031984a0, 0xd}, {0x0, ...}, ...}, ...)
/Users/levdik/arcadia/vendor/go.opentelemetry.io/contrib/bridges/otelzap/core.go:203 +0x15c
go.uber.org/zap/zapcore.(*CheckedEntry).Write(0x140001b2820, {0x14000111080, 0x1, 0x1})
/Users/levdik/arcadia/vendor/go.uber.org/zap/zapcore/entry.go:253 +0xe4
go.uber.org/zap.(*Logger).Info(0x103191fca?, {0x1031984a0?, 0x1032cb280?}, {0x14000111080, 0x1, 0x1})
/Users/levdik/arcadia/vendor/go.uber.org/zap/logger.go:247 +0x54
main.main()
/Users/levdik/arcadia/junk/levdik/otel/main.go:36 +0x38c
Expected behavior
No panic