log.go 875 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package debug
  2. import (
  3. "io/ioutil"
  4. "log"
  5. "os"
  6. )
  7. const (
  8. envEnableLog = "GO_PROMPT_ENABLE_LOG"
  9. logFileName = "go-prompt.log"
  10. )
  11. var (
  12. logfile *os.File
  13. logger *log.Logger
  14. )
  15. func init() {
  16. if e := os.Getenv(envEnableLog); e == "true" || e == "1" {
  17. var err error
  18. logfile, err = os.OpenFile(logFileName, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
  19. if err == nil {
  20. logger = log.New(logfile, "", log.Llongfile)
  21. return
  22. }
  23. }
  24. logger = log.New(ioutil.Discard, "", log.Llongfile)
  25. }
  26. // Teardown to close logfile
  27. func Teardown() {
  28. if logfile == nil {
  29. return
  30. }
  31. _ = logfile.Close()
  32. }
  33. func writeWithSync(calldepth int, msg string) {
  34. calldepth++
  35. if logfile == nil {
  36. return
  37. }
  38. _ = logger.Output(calldepth, msg)
  39. _ = logfile.Sync() // immediately write msg
  40. }
  41. // Log to output message
  42. func Log(msg string) {
  43. calldepth := 2
  44. writeWithSync(calldepth, msg)
  45. }