github.com/hoop33/elvish@v0.0.0-20160801152013-6d25485beab4/util/log.go (about) 1 package util 2 3 import ( 4 "io" 5 "io/ioutil" 6 "log" 7 "os" 8 ) 9 10 var ( 11 out io.Writer = ioutil.Discard 12 logFile *os.File 13 loggers []*log.Logger 14 ) 15 16 // GetLogger gets a logger with a prefix. 17 func GetLogger(prefix string) *log.Logger { 18 logger := log.New(out, prefix, log.LstdFlags) 19 loggers = append(loggers, logger) 20 return logger 21 } 22 23 func setOutput(newout io.Writer) { 24 out = newout 25 for _, logger := range loggers { 26 logger.SetOutput(out) 27 } 28 } 29 30 func SetOutputFile(fname string) error { 31 if logFile != nil { 32 logFile.Close() 33 } 34 if fname == "" { 35 logFile = nil 36 setOutput(ioutil.Discard) 37 return nil 38 } 39 var err error 40 logFile, err = os.OpenFile(fname, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) 41 if err != nil { 42 return err 43 } 44 setOutput(logFile) 45 return nil 46 }