Files
gocommon/logger/logger.go

104 lines
2.1 KiB
Go
Raw Permalink Normal View History

2023-05-24 15:10:15 +09:00
package logger
import (
2023-06-14 01:22:08 +09:00
"flag"
2023-05-24 15:10:15 +09:00
"fmt"
"io"
"log"
"os"
"path"
"runtime/debug"
"strings"
)
var stdlogger *log.Logger
var errlogger *log.Logger
2023-06-14 01:22:08 +09:00
var _ = flag.Bool("logfile", false, "")
2023-05-24 15:10:15 +09:00
func init() {
binpath, _ := os.Executable()
binname := path.Base(strings.ReplaceAll(binpath, "\\", "/"))
2023-06-14 00:08:16 +09:00
var outWriter io.Writer
var errWriter io.Writer
outWriter = os.Stdout
errWriter = os.Stderr
2023-05-24 15:10:15 +09:00
args := os.Args
useLogFile := false
for _, arg := range args {
if arg == "-logfile" {
useLogFile = true
break
}
}
if useLogFile {
2023-05-24 15:10:15 +09:00
ext := path.Ext(binname)
if len(ext) > 0 {
binname = binname[:len(binname)-len(ext)]
}
2023-06-14 00:08:16 +09:00
logFile, err := os.Create(fmt.Sprintf("%s.log", binname))
2023-05-24 15:10:15 +09:00
if err != nil {
2023-06-14 00:08:16 +09:00
os.Stdout.Write([]byte(err.Error()))
2023-05-24 15:10:15 +09:00
panic(err)
}
2023-06-14 00:08:16 +09:00
outWriter = io.MultiWriter(outWriter, logFile)
errWriter = io.MultiWriter(errWriter, logFile)
2023-05-24 15:10:15 +09:00
}
2023-06-14 00:08:16 +09:00
stdlogger = log.New(outWriter, "", log.LstdFlags)
errlogger = log.New(errWriter, "", log.LstdFlags)
2023-05-24 15:10:15 +09:00
}
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)
}