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  }