src/bosh-softlayer-cpi/logger/logger.go
func (l *logger) ChangeRetryStrategyLogTag(retryStrategy *boshretry.RetryStrategy) error {
	defer func() {
		if err := recover(); err != nil {
			l.Warn("cpiLogger", fmt.Sprintf("Recovered from panic when ChangeRetryStrategyLogTag: %s", err))
		}
	}()

	//retryStrategy only refer interface RetryStrategy, so add '*' to get private timeoutRetryStrategy
	pointerVal := reflect.ValueOf(*retryStrategy)
	val := reflect.Indirect(pointerVal)

	logtag := val.FieldByName("logTag")
	// Overwrite unexported bosh-utils/retrystrategy/timeoutRetryStrategy.logger to distinguish logs
	// #nosec G103
	ptrToLogTag := unsafe.Pointer(logtag.UnsafeAddr())
	realPtrToLogTag := (*string)(ptrToLogTag)
	serialTagPrefix := fmt.Sprintf("%s:%s", l.GetSerialTagPrefix(), logtag)
	*realPtrToLogTag = serialTagPrefix

	return nil
}
func (l *logger) ChangeRetryStrategyLogTag(retryStrategy *boshretry.RetryStrategy) error {
	defer func() {
		if err := recover(); err != nil {
			l.Warn("cpiLogger", fmt.Sprintf("Recovered from panic when ChangeRetryStrategyLogTag: %s", err))
		}
	}()

	//retryStrategy only refer interface RetryStrategy, so add '*' to get private timeoutRetryStrategy
	pointerVal := reflect.ValueOf(*retryStrategy)
	val := reflect.Indirect(pointerVal)

	logtag := val.FieldByName("logTag")
	// Overwrite unexported bosh-utils/retrystrategy/timeoutRetryStrategy.logger to distinguish logs
	// #nosec G103
	ptrToLogTag := unsafe.Pointer(logtag.UnsafeAddr())
	realPtrToLogTag := (*string)(ptrToLogTag)
	serialTagPrefix := fmt.Sprintf("%s:%s", l.GetSerialTagPrefix(), logtag)
	*realPtrToLogTag = serialTagPrefix

	return nil
}
// it's unfriendly to change RetryStrategy().logtag