30 lines
		
	
	
		
			453 B
		
	
	
	
		
			Go
		
	
	
		
		
			
		
	
	
			30 lines
		
	
	
		
			453 B
		
	
	
	
		
			Go
		
	
	
|  | package log | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"fmt" | ||
|  | 	"runtime" | ||
|  | ) | ||
|  | 
 | ||
|  | func caller(depth int) string { | ||
|  | 	_, file, line, _ := runtime.Caller(depth) | ||
|  | 	short := file | ||
|  | 	for i := len(file) - 1; i > 0; i-- { | ||
|  | 		if file[i] == '/' { | ||
|  | 			short = file[i+1:] | ||
|  | 			break | ||
|  | 		} | ||
|  | 	} | ||
|  | 	return fmt.Sprintf("%s:%d", short, line) | ||
|  | } | ||
|  | 
 | ||
|  | func stack() string { | ||
|  | 	buf := make([]byte, 1024) | ||
|  | 	for { | ||
|  | 		n := runtime.Stack(buf, false) | ||
|  | 		if n < len(buf) { | ||
|  | 			return string(buf[:n]) | ||
|  | 		} | ||
|  | 		buf = make([]byte, 2*len(buf)) | ||
|  | 	} | ||
|  | } |