53 lines
875 B
Go
53 lines
875 B
Go
package debug
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
)
|
|
|
|
const (
|
|
envEnableLog = "GO_PROMPT_ENABLE_LOG"
|
|
logFileName = "go-prompt.log"
|
|
)
|
|
|
|
var (
|
|
logfile *os.File
|
|
logger *log.Logger
|
|
)
|
|
|
|
func init() {
|
|
if e := os.Getenv(envEnableLog); e == "true" || e == "1" {
|
|
var err error
|
|
logfile, err = os.OpenFile(logFileName, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
|
|
if err == nil {
|
|
logger = log.New(logfile, "", log.Llongfile)
|
|
return
|
|
}
|
|
}
|
|
logger = log.New(ioutil.Discard, "", log.Llongfile)
|
|
}
|
|
|
|
// Teardown to close logfile
|
|
func Teardown() {
|
|
if logfile == nil {
|
|
return
|
|
}
|
|
_ = logfile.Close()
|
|
}
|
|
|
|
func writeWithSync(calldepth int, msg string) {
|
|
calldepth++
|
|
if logfile == nil {
|
|
return
|
|
}
|
|
_ = logger.Output(calldepth, msg)
|
|
_ = logfile.Sync() // immediately write msg
|
|
}
|
|
|
|
// Log to output message
|
|
func Log(msg string) {
|
|
calldepth := 2
|
|
writeWithSync(calldepth, msg)
|
|
}
|