Goログログ——logパッケージ
21862 ワード
Goログログ——logパッケージ
http://studygolang.com/articles/9184
Golang's logsモジュールは主に3種類のインターフェースを提供しています。それぞれ「Print」です 、Panic 、Fatal ”,各種類のインターフェースに対して、3の呼び出し方式を提供しています。それぞれ「XXXX、Xxxln」です。 、Xxxf"は、基本的にfmtの相関関数と同様であり、以下はPrintの例である。
log.Panicインターフェースについては、ログの内容を標準エラーにしてからpanic関数を呼び出します。以下はPanicの例です。
ロギングタイプもカスタマイズできます。 ロゴ.ロギングはオブジェクトを作成するためのNew方法を提供します。
(1)出力先outは、io.Writerオブジェクトであり、このオブジェクトは一つのファイルでも良いし、このインターフェースを実現したオブジェクトでもいいです。これを使ってログをどのファイルに出力するかを指定できます。(2)prefixは前にすでに見られました。ログの内容の前にあるものです。「Info」、「Warning」に設定できます。などでログのレベルを区別することができます。(3)フラグはオプションです。ログの先頭を表示するものは、オプションの値があります。
http://studygolang.com/articles/9184
Golang's logsモジュールは主に3種類のインターフェースを提供しています。それぞれ「Print」です 、Panic 、Fatal ”,各種類のインターフェースに対して、3の呼び出し方式を提供しています。それぞれ「XXXX、Xxxln」です。 、Xxxf"は、基本的にfmtの相関関数と同様であり、以下はPrintの例である。
package main
import (
"log"
)
func main(){
arr := []int {2,3}
log.Print("Print array ",arr,"
")
log.Println("Println array",arr)
log.Printf("Printf array with item [%d,%d]
",arr[0],arr[1])
}
次のような結果が得られます。2016/12/15 19:46:19 Print array [2 3]
2016/12/15 19:46:19 Println array [2 3]
2016/12/15 19:46:19 Printf array with item [2,3]
log.Fatalインターフェースについては、まずログの内容を標準出力に印刷して、システムの os.exit(1) インターフェースは、プログラムを終了して状態1に戻りますが、システムインターフェースを直接起動して終了したため、defer関数が呼び出されません。以下はFatalの例です。package main
import (
"fmt"
"log"
)
func test_deferfatal(){
defer func() {
fmt.Println("--first--")
}()
log.Fatalln("test for defer Fatal")
}
func main() {
test_deferfatal()
}
次のような結果が得られます。2016/12/15 19:46:45 test for defer Fatal
defer関数が起動されていないことが分かります。log.Panicインターフェースについては、ログの内容を標準エラーにしてからpanic関数を呼び出します。以下はPanicの例です。
package main
import (
"fmt"
"log"
)
func test_deferpanic(){
defer func() {
fmt.Println("--first--")
if err := recover(); err != nil {
fmt.Println(err)
}
}()
log.Panicln("test for defer Panic")
defer func() {
fmt.Println("--second--")
}()
}
func main() {
test_deferpanic()
}
次のような結果が得られます。2016/12/15 19:59:30 test for defer Panic
--first--
test for defer Panic
まず「test for defer Panic」を出力し、最初のdefer関数が呼び出されて「--first-」を出力したが、2番目のdefer関数は出力されておらず、Panicの後に宣言されたdeferは実行されないことが分かります。ロギングタイプもカスタマイズできます。 ロゴ.ロギングはオブジェクトを作成するためのNew方法を提供します。
func New(out io.Writer, prefix string, flag int) *Logger
この関数には全部で三つのパラメータがあります。(1)出力先outは、io.Writerオブジェクトであり、このオブジェクトは一つのファイルでも良いし、このインターフェースを実現したオブジェクトでもいいです。これを使ってログをどのファイルに出力するかを指定できます。(2)prefixは前にすでに見られました。ログの内容の前にあるものです。「Info」、「Warning」に設定できます。などでログのレベルを区別することができます。(3)フラグはオプションです。ログの先頭を表示するものは、オプションの値があります。
Ldate = 1 << iota // 2009/01/23
Ltime // 01:23:23
Lmicroseconds // 01:23:23.123123
Llongfile // : /a/b/c/d.go:23
Lshortfile // : d.go:23
LstdFlags = Ldate | Ltime //
例は以下の通りですpackage main
import (
"log"
"os"
)
func main(){
fileName := "Info_First.log"
logFile,err := os.Create(fileName)
defer logFile.Close()
if err != nil {
log.Fatalln("open file error")
}
debugLog := log.New(logFile,"[Info]",log.Llongfile)
debugLog.Println("A Info message here")
debugLog.SetPrefix("[Debug]")
debugLog.Println("A Debug Message here ")
}