|  | @@ -4,6 +4,7 @@ import (
 | 
	
		
			
				|  |  |  	"fmt"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	"github.com/v2ray/v2ray-core/common"
 | 
	
		
			
				|  |  | +	"github.com/v2ray/v2ray-core/common/alloc"
 | 
	
		
			
				|  |  |  	"github.com/v2ray/v2ray-core/common/serial"
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -33,22 +34,26 @@ func (this *errorLog) Release() {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  func (this *errorLog) String() string {
 | 
	
		
			
				|  |  | -	data := ""
 | 
	
		
			
				|  |  | +	b := alloc.NewSmallBuffer().Clear()
 | 
	
		
			
				|  |  | +	defer b.Release()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	b.AppendString(this.prefix)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	for _, value := range this.values {
 | 
	
		
			
				|  |  |  		switch typedVal := value.(type) {
 | 
	
		
			
				|  |  |  		case string:
 | 
	
		
			
				|  |  | -			data += typedVal
 | 
	
		
			
				|  |  | +			b.AppendString(typedVal)
 | 
	
		
			
				|  |  |  		case *string:
 | 
	
		
			
				|  |  | -			data += *typedVal
 | 
	
		
			
				|  |  | +			b.AppendString(*typedVal)
 | 
	
		
			
				|  |  |  		case serial.String:
 | 
	
		
			
				|  |  | -			data += typedVal.String()
 | 
	
		
			
				|  |  | +			b.AppendString(typedVal.String())
 | 
	
		
			
				|  |  |  		case error:
 | 
	
		
			
				|  |  | -			data += typedVal.Error()
 | 
	
		
			
				|  |  | +			b.AppendString(typedVal.Error())
 | 
	
		
			
				|  |  |  		default:
 | 
	
		
			
				|  |  | -			data += fmt.Sprintf("%v", value)
 | 
	
		
			
				|  |  | +			b.AppendString(fmt.Sprint(value))
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -	return this.prefix + data
 | 
	
		
			
				|  |  | +	return b.String()
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  var (
 |