| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | 
							- package internal
 
- import (
 
- 	"fmt"
 
- 	"strings"
 
- 	"v2ray.com/core/common"
 
- 	"v2ray.com/core/common/serial"
 
- )
 
- func InterfaceToString(value interface{}) string {
 
- 	if value == nil {
 
- 		return " "
 
- 	}
 
- 	switch value := value.(type) {
 
- 	case string:
 
- 		return value
 
- 	case *string:
 
- 		return *value
 
- 	case fmt.Stringer:
 
- 		return value.String()
 
- 	case error:
 
- 		return value.Error()
 
- 	case []byte:
 
- 		return serial.BytesToHexString(value)
 
- 	default:
 
- 		return fmt.Sprintf("%+v", value)
 
- 	}
 
- }
 
- type LogEntry interface {
 
- 	common.Releasable
 
- 	fmt.Stringer
 
- }
 
- type ErrorLog struct {
 
- 	Prefix string
 
- 	Values []interface{}
 
- }
 
- func (v *ErrorLog) Release() {
 
- 	for index := range v.Values {
 
- 		v.Values[index] = nil
 
- 	}
 
- 	v.Values = nil
 
- }
 
- func (v *ErrorLog) String() string {
 
- 	values := make([]string, len(v.Values)+1)
 
- 	values[0] = v.Prefix
 
- 	for i, value := range v.Values {
 
- 		values[i+1] = InterfaceToString(value)
 
- 	}
 
- 	return strings.Join(values, "")
 
- }
 
- type AccessLog struct {
 
- 	From   interface{}
 
- 	To     interface{}
 
- 	Status string
 
- 	Reason interface{}
 
- }
 
- func (v *AccessLog) Release() {
 
- 	v.From = nil
 
- 	v.To = nil
 
- 	v.Reason = nil
 
- }
 
- func (v *AccessLog) String() string {
 
- 	return strings.Join([]string{InterfaceToString(v.From), v.Status, InterfaceToString(v.To), InterfaceToString(v.Reason)}, " ")
 
- }
 
 
  |