mirror of
				https://github.com/TeaOSLab/EdgeNode.git
				synced 2025-11-04 16:00:25 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
 | 
						|
 | 
						|
package js
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/json"
 | 
						|
	"github.com/iwind/TeaGo/logs"
 | 
						|
	"reflect"
 | 
						|
)
 | 
						|
 | 
						|
type Console struct {
 | 
						|
}
 | 
						|
 | 
						|
func (this *Console) Log(args ...interface{}) {
 | 
						|
	for index, arg := range args {
 | 
						|
		if arg != nil {
 | 
						|
			switch arg.(type) {
 | 
						|
			case bool, int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, string:
 | 
						|
			default:
 | 
						|
				var argType = reflect.TypeOf(arg)
 | 
						|
 | 
						|
				// 是否有String()方法,如果有直接调用
 | 
						|
				method, ok := argType.MethodByName("String")
 | 
						|
				if ok && method.Type.NumIn() == 1 && method.Type.NumOut() == 1 && method.Type.Out(0).Kind() == reflect.String {
 | 
						|
					args[index] = method.Func.Call([]reflect.Value{reflect.ValueOf(arg)})[0].String()
 | 
						|
					continue
 | 
						|
				}
 | 
						|
 | 
						|
				// 转为JSON
 | 
						|
				argJSON, err := this.toJSON(arg)
 | 
						|
				if err != nil {
 | 
						|
					if argType.Kind() == reflect.Func {
 | 
						|
						args[index] = "[function]"
 | 
						|
					} else {
 | 
						|
						args[index] = "[object]"
 | 
						|
					}
 | 
						|
				} else {
 | 
						|
					args[index] = string(argJSON)
 | 
						|
				}
 | 
						|
			}
 | 
						|
		} else {
 | 
						|
			args[index] = "null"
 | 
						|
		}
 | 
						|
	}
 | 
						|
	logs.Println(append([]interface{}{"[js][console]"}, args...)...)
 | 
						|
}
 | 
						|
 | 
						|
func (this *Console) toJSON(o interface{}) ([]byte, error) {
 | 
						|
	return json.Marshal(o)
 | 
						|
}
 |