| 
					
				 | 
			
			
				@@ -57,12 +57,25 @@ func Dump(v ...interface{}) interface{} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func dump(a ...interface{}) []interface{} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for ai, av := range a { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if avf, ok := av.(func() string); ok { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			a[ai] = avf() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else if avf, ok := av.(fmt.Stringer); ok { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			a[ai] = avf.String() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else if avf, ok := av.(fmt.GoStringer); ok { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			a[ai] = avf.GoString() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return a 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // Trace log 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func Trace(a ...interface{}) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if level <= TRACE { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, path, line, _ := runtime.Caller(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, file := filepath.Split(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fmt.Printf("TRACE: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(a...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fmt.Printf("TRACE: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(dump(a...)...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -71,7 +84,7 @@ func Tracef(format string, a ...interface{}) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if level <= TRACE { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, path, line, _ := runtime.Caller(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, file := filepath.Split(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fmt.Printf("TRACE: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, a...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fmt.Printf("TRACE: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, dump(a...)...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -80,7 +93,7 @@ func Debug(a ...interface{}) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if level <= DEBUG { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, path, line, _ := runtime.Caller(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, file := filepath.Split(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fmt.Printf("DEBUG: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(a...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fmt.Printf("DEBUG: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(dump(a...)...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -89,7 +102,7 @@ func Debugf(format string, a ...interface{}) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if level <= DEBUG { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, path, line, _ := runtime.Caller(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, file := filepath.Split(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fmt.Printf("DEBUG: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, a...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fmt.Printf("DEBUG: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, dump(a...)...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -98,7 +111,7 @@ func Info(a ...interface{}) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if level <= INFO { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, path, line, _ := runtime.Caller(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, file := filepath.Split(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fmt.Printf("INFO: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(a...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fmt.Printf("INFO: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(dump(a...)...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -107,7 +120,7 @@ func Infof(format string, a ...interface{}) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if level <= INFO { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, path, line, _ := runtime.Caller(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, file := filepath.Split(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fmt.Printf("INFO: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, a...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fmt.Printf("INFO: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, dump(a...)...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -116,7 +129,7 @@ func Warning(a ...interface{}) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if level <= WARNING { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, path, line, _ := runtime.Caller(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, file := filepath.Split(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fmt.Printf("WARN: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(a...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fmt.Printf("WARN: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(dump(a...)...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -125,7 +138,7 @@ func Warningf(format string, a ...interface{}) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if level <= WARNING { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, path, line, _ := runtime.Caller(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, file := filepath.Split(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fmt.Printf("WARN: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, a...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fmt.Printf("WARN: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, dump(a...)...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -134,7 +147,7 @@ func Error(a ...interface{}) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if level <= ERROR { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, path, line, _ := runtime.Caller(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, file := filepath.Split(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fmt.Fprintf(os.Stderr, "ERROR: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(a...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fmt.Fprintf(os.Stderr, "ERROR: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprint(dump(a...)...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -143,6 +156,6 @@ func Errorf(format string, a ...interface{}) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if level <= ERROR { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, path, line, _ := runtime.Caller(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_, file := filepath.Split(path) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		fmt.Fprintf(os.Stderr, "ERROR: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, a...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fmt.Fprintf(os.Stderr, "ERROR: %s %v:%v: %s\n", time.Now().Format("01:04:05.000"), file, line, fmt.Sprintf(format, dump(a...)...)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |