#方法
logパッケージの「SetOutput」関数を使う
#書き方
main.go
package main
import (
"log"
"os"
)
func main() {
// ファイルを開く。(引数はテストの名前 、flag、perm)
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())
}
//main関数の最後にファイルを閉じるためdeferを記述
defer logfile.Close()
//標準ロガーの出力先を設定(定義したlogfileに出力するように記述)
log.SetOutput(logfile)
log.Println("TestLog")
}
main.goを実行すると、ディレクトリ内にtest.logが作成され、中身には「Testlog」と表示されます。
test.log
2020/12/16 22:18:56 TestLog
#補足
上記を試すと、ターミナルには log.Printlnの出力がされないと思います。
ターミナルにもファイルにもログを出力をさせたい場合ioパッケージのMultiWriterメソッドを使用します。
具体的にはこのように書きます。
main.go
package main
import (
"io"
"log"
"os"
)
func main() {
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()
// SetOutputの引数を追記
log.SetOutput(io.MultiWriter(logfile, os.Stdout))
log.Println("Testlog(ファイルにもターミナルにも出力される)")
}
ターミナルにもファイルにも出力できましたでしょうか。
このように書くと、ターミナルにもファイルにもログを出力させることができます。