2018-12-29 14:23:08 +00:00
// Wrapper for standard library log, with the only difference is that it has extra function Tracef() and optional verbose flag to enable output from that.
package log
import (
"fmt"
"log"
"os"
"path"
"runtime"
"strings"
)
var Verbose = false
2018-12-29 14:23:42 +00:00
// Print calls Output to print to the standard logger.
// Arguments are handled in the manner of fmt.Print.
func Print ( v ... interface { } ) {
log . Print ( v ... )
}
2018-12-29 14:23:08 +00:00
// Printf calls Output to print to the standard logger.
// Arguments are handled in the manner of fmt.Printf.
func Printf ( format string , v ... interface { } ) {
log . Printf ( format , v ... )
}
2018-12-29 14:23:42 +00:00
// Println calls Output to print to the standard logger.
// Arguments are handled in the manner of fmt.Println.
func Println ( v ... interface { } ) {
log . Println ( v ... )
}
// Fatal is equivalent to Print() followed by a call to os.Exit(1).
func Fatal ( v ... interface { } ) {
log . Fatal ( v ... )
}
// Fatalf is equivalent to Printf() followed by a call to os.Exit(1).
func Fatalf ( format string , v ... interface { } ) {
log . Fatalf ( format , v ... )
}
2018-12-29 14:23:08 +00:00
func Tracef ( format string , v ... interface { } ) {
if Verbose {
pc := make ( [ ] uintptr , 10 ) // at least 1 entry needed
runtime . Callers ( 2 , pc )
f := runtime . FuncForPC ( pc [ 0 ] )
var buf strings . Builder
buf . WriteString ( fmt . Sprintf ( "%s(): " , path . Base ( f . Name ( ) ) ) )
text := fmt . Sprintf ( format , v ... )
buf . WriteString ( text )
if len ( text ) == 0 || text [ len ( text ) - 1 ] != '\n' {
buf . WriteRune ( '\n' )
}
fmt . Fprint ( os . Stderr , buf . String ( ) )
}
}