をオーバーライド func (e *ExporterWithErrors) Export(ctx, logs) error { err := e.Exporter.Export(ctx, logs) // 元の処理 if err != nil { // atomic.Pointer でスレッドセーフにエラーを蓄積 e.errors.Store(...) } return err } 独自のSDKラッパーを作成 Exporter With Errors Logger Wrapper type LoggerWrapper struct { otelLogger otelLog.Logger } func (lw *LoggerWrapper) Emit(ctx, record) { lw.otelLogger.Emit(ctx, record) } Provider Wrapper type ProviderWrapper struct { otelProvider *log.LoggerProvider } // Shutdown / ForceFlush を nil ガード付きで委譲 テスト時にモックを作りやすくするために、使う機能(Emit)だけに絞ったインターフェースを定義