package utils import ( "errors" "io" "log" "os" ) var MissingTarget = errors.New("Missing write target") func NewWriter(paths ...string) (io.Writer, error) { if len(paths) == 0 { return nil, MissingTarget } else if len(paths) == 1 { return stringToWriter(paths[0]) } var writers []io.Writer for _, path := range paths { writer, err := stringToWriter(path) if err != nil { return nil, err } writers = append(writers, writer) } ioWriter := io.MultiWriter(writers...) return ioWriter, nil } func MustWriter(paths ...string) io.Writer { writer, err := NewWriter(paths...) if err != nil { log.Fatalln(err) } return writer } var stringWriter = map[string]io.Writer{ "stdout": os.Stdout, "stderr": os.Stderr, "stdin": os.Stdin, "discard": io.Discard, } func stringToWriter(path string) (io.Writer, error) { if writer, ok := stringWriter[path]; ok { return writer, nil } f, err := os.OpenFile(path, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666) return f, err }