102 lines
2.0 KiB
Go
102 lines
2.0 KiB
Go
package logger
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
"path"
|
|
"runtime/debug"
|
|
"strings"
|
|
)
|
|
|
|
var stdlogger *log.Logger
|
|
var errlogger *log.Logger
|
|
|
|
func init() {
|
|
binpath, _ := os.Executable()
|
|
binname := path.Base(strings.ReplaceAll(binpath, "\\", "/"))
|
|
|
|
var outWriter io.Writer
|
|
var errWriter io.Writer
|
|
outWriter = os.Stdout
|
|
errWriter = os.Stderr
|
|
|
|
args := os.Args
|
|
useLogFile := false
|
|
for _, arg := range args {
|
|
if arg == "-logfile" {
|
|
useLogFile = true
|
|
break
|
|
}
|
|
}
|
|
|
|
if useLogFile {
|
|
ext := path.Ext(binname)
|
|
if len(ext) > 0 {
|
|
binname = binname[:len(binname)-len(ext)]
|
|
}
|
|
|
|
logFile, err := os.Create(fmt.Sprintf("%s.log", binname))
|
|
if err != nil {
|
|
os.Stdout.Write([]byte(err.Error()))
|
|
panic(err)
|
|
}
|
|
|
|
outWriter = io.MultiWriter(outWriter, logFile)
|
|
errWriter = io.MultiWriter(errWriter, logFile)
|
|
}
|
|
|
|
stdlogger = log.New(outWriter, "", log.LstdFlags)
|
|
errlogger = log.New(errWriter, "", log.LstdFlags)
|
|
}
|
|
|
|
func Println(v ...interface{}) {
|
|
stdlogger.Output(2, fmt.Sprintln(v...))
|
|
}
|
|
|
|
func Printf(format string, v ...interface{}) {
|
|
stdlogger.Output(2, fmt.Sprintf(format, v...))
|
|
}
|
|
|
|
func Error(v ...interface{}) {
|
|
errlogger.Output(2, fmt.Sprintln(v...))
|
|
errlogger.Output(2, string(debug.Stack()))
|
|
}
|
|
|
|
func Errorf(format string, v ...interface{}) {
|
|
errlogger.Output(2, fmt.Sprintf(format, v...))
|
|
errlogger.Output(2, string(debug.Stack()))
|
|
}
|
|
|
|
func Fatal(v ...interface{}) {
|
|
errlogger.Output(2, fmt.Sprint(v...))
|
|
errlogger.Output(2, string(debug.Stack()))
|
|
os.Exit(1)
|
|
}
|
|
func Fatalln(v ...interface{}) {
|
|
errlogger.Output(2, fmt.Sprintln(v...))
|
|
errlogger.Output(2, string(debug.Stack()))
|
|
os.Exit(1)
|
|
}
|
|
func Panic(v ...interface{}) {
|
|
s := fmt.Sprint(v...)
|
|
errlogger.Output(2, s)
|
|
errlogger.Output(2, string(debug.Stack()))
|
|
panic(s)
|
|
}
|
|
|
|
func Panicf(format string, v ...interface{}) {
|
|
s := fmt.Sprintf(format, v...)
|
|
errlogger.Output(2, s)
|
|
errlogger.Output(2, string(debug.Stack()))
|
|
panic(s)
|
|
}
|
|
|
|
func Panicln(v ...interface{}) {
|
|
s := fmt.Sprintln(v...)
|
|
errlogger.Output(2, s)
|
|
errlogger.Output(2, string(debug.Stack()))
|
|
panic(s)
|
|
}
|