LoginSignup
1
1

More than 3 years have passed since last update.

【Go言語】logを別ファイルに出力する

Posted at

方法

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(ファイルにもターミナルにも出力される)")
}

ターミナルにもファイルにも出力できましたでしょうか。
このように書くと、ターミナルにもファイルにもログを出力させることができます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1