2018-10-14 15:25:23 -04:00
|
|
|
// Package log prints different kinds of log messages in the formats we like.
|
|
|
|
|
package log
|
|
|
|
|
|
|
|
|
|
import (
|
2019-05-23 06:59:22 -04:00
|
|
|
"fmt"
|
2018-10-14 15:25:23 -04:00
|
|
|
"log"
|
|
|
|
|
"os"
|
2019-05-23 06:59:22 -04:00
|
|
|
"runtime"
|
2018-10-14 15:25:23 -04:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var (
|
|
|
|
|
InfoLog *log.Logger
|
|
|
|
|
ErrorLog *log.Logger
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
InfoLog = log.New(os.Stdout, "", log.Ldate|log.Ltime)
|
2019-05-23 06:59:22 -04:00
|
|
|
ErrorLog = log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime)
|
2018-10-14 15:25:23 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Info logs an informational message to Stdout.
|
|
|
|
|
func Info(s string, v ...interface{}) {
|
|
|
|
|
InfoLog.Printf(s, v...)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Error logs an error to Stderr.
|
|
|
|
|
func Error(s string, v ...interface{}) {
|
2019-05-23 06:59:22 -04:00
|
|
|
// Include original caller information
|
|
|
|
|
_, file, line, _ := runtime.Caller(1)
|
|
|
|
|
|
|
|
|
|
// Determine short filename (from standard log package)
|
|
|
|
|
short := file
|
|
|
|
|
for i := len(file) - 1; i > 0; i-- {
|
|
|
|
|
if file[i] == '/' {
|
|
|
|
|
short = file[i+1:]
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
file = short
|
|
|
|
|
|
|
|
|
|
ErrorLog.Printf(fmt.Sprintf("%s:%d: ", short, line)+s, v...)
|
2018-10-14 15:25:23 -04:00
|
|
|
}
|