【Go學習筆記8】go語言中的工具包-日誌

日誌

在go語言中,內置了日誌工具包來方便開發者記錄日誌信息。go語言中,關於日誌的操做都在log包中。工具

log的經常使用方法介紹

  • log.SetPrefix(prefix string) : 設置日誌輸出的前綴
  • log.SetFlags(flag int) : 設置日誌標誌,這個標誌用來控制輸出到日誌中的其餘信息,包括日期,時間,文件的路徑名和行號,最終的文件名和行號等信息。
  • log.SetOutput(w io.Writer) :設置輸出位置,參數是一個io的寫入流
  • log.Fatalln(v ...interface{}) :輸出致命的錯誤,而後退出程序。參數能夠是任意類型,可變長度參數。
  • log.Panicln(v ...interface{}) :輸出警告信息。參數能夠是任意類型,可變長度參數。
  • log.Println(v ...interface{}) :輸出正常的日誌信息,參數能夠是任意類型,可變長度參數。
package main

import (
	"log"
)

func init(){
  //設置日誌前綴
	log.SetPrefix("日誌:")
  //設置標誌,這裏設置了讓日誌信息中添加日期,時間,文件的短路徑名稱信息
	log.SetFlags(log.Ldate | log.Lshortfile | log.Ltime)
}

func main(){
	log.Println("這是日誌信息。。");
}
//日誌:2017/10/02 13:41:38 main.go:13: 這是日誌信息。。
複製代碼

再來看下面的代碼:ui

package main

import (
	"log"
)

func init(){
	log.SetPrefix("日誌:")
	log.SetFlags(log.Ldate | log.Lshortfile | log.Ltime)
}

func main(){
	log.Println("這是正常的日誌信息。。")
	log.Fatalln("致命的錯誤日誌信息。。")
	log.Panicln("警告的日誌信息。。")
}
//日誌:2017/10/02 13:44:49 main.go:13: 這是正常的日誌信息。。
//日誌:2017/10/02 13:44:49 main.go:14: 致命的錯誤日誌信息。。
//exit status 1
複製代碼

從上面的執行結果能夠看出,在調用了Fatalln方法以後,程序會退出執行。因此下面一行的代碼也就沒法執行了。spa

package main

import (
	"io"
	"log"
	"os"
)

func init(){
	log.SetPrefix("日誌:")
	log.SetFlags(log.Ldate | log.Lshortfile | log.Ltime)
}

func main(){
	file ,_ := os.OpenFile("errors.txt",os.O_WRONLY,0666)

	log.SetOutput(io.Writer(file))

	log.Println("這個日誌將會輸出到文件中")
}
複製代碼

上面的代碼設置了log的輸出,將日誌輸出到文件errors中了。代碼在執行後就會在文件errors.txt中添加日誌信息。 其中os.OpenFile方法用來打開一個文件,更多說明請點日誌

這裏

自定義日誌記錄器

在其餘語言中,咱們記錄日誌的時候通常會用到info,warn,error等方法來輸出各類不一樣級別的日誌信息。在go中,咱們也能夠實現這樣的日誌記錄器。code

package main

import (
	"io"
	"log"
	"os"
)

//聲明3個變量,用來記錄不一樣的日誌信息
var Info *log.Logger
var Warn *log.Logger
var Error *log.Logger

//初始化
func init(){
	Info = log.New(os.Stdout,"Info:",log.Ldate | log.Ltime | log.Lshortfile)
	Warn = log.New(os.Stdout,"Warn:",log.Ldate | log.Ltime | log.Lshortfile)
	
	file , err := os.OpenFile("errors.txt",os.O_APPEND |os.O_WRONLY,0666)
	//若是打開錯誤日誌文件失敗
	if err != nil{
		log.Fatalln("打開日誌文件失敗。。")
	}
	//初始化錯誤日誌記錄器Error
	Error = log.New(io.MultiWriter(os.Stderr,file),"Error:",log.Ldate | log.Ltime | log.Lshortfile)
}

func main(){
	Info.Println("info日誌")
	Warn.Println("warn日誌")
	Error.Println("error日誌")
}

//Info:2017/10/02 14:32:56 main.go:29: info日誌
//Warn:2017/10/02 14:32:56 main.go:30: warn日誌
//Error:2017/10/02 14:32:56 main.go:31: error日誌
複製代碼

上面的代碼運行以後,會在控制檯輸出上面的內容,同時會在errors.txt文件中,加入「Error:2017/10/02 14:32:56 main.go:31: error日誌」 信息。io.MultiWriter方法用來建立一個Writer對象,這個對象會將寫入提供給參數中定義的每個writer,用來將日誌信息同時寫入到多個輸出中。 關於這個方法的更多說明,請點cdn

這裏
相關文章
相關標籤/搜索