golangでlogを標準出力とテキストファイルの2箇所の出力する

2箇所に出力したい場合、io.MultiWriterが便利。

logfile, err := os.OpenFile("./test.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {
    panic("cannnot open test.log:" + err.Error())
}
defer logfile.Close()

// io.MultiWriteで、
// 標準出力とファイルの両方を束ねて、
// logの出力先に設定する
log.SetOutput(io.MultiWriter(logfile, os.Stdout))

log.SetFlags(log.Ldate | log.Ltime)
log.Println("Log!!")