這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Go目前標準包中日誌只是方便的實現日誌記錄的功能,這些日誌都是基於fmt包的列印再結合panic之類的函數來進行一般的列印、拋出錯誤處理。
一個簡單的日誌記錄代碼例子:
代碼來自:http://www.du52.com/text.php?id=114
package mainimport( "fmt" "log" "os")func main(){ logfile,err:=os.OpenFile("/Users/cybercare/tmp/test.log",os.O_RDWR|os.O_CREATE,0666) if err!=nil{ fmt.Printf("%s\r\n",err.Error()) os.Exit(-1) } defer logfile.Close() logger:=log.New(logfile,"\r\n",log.Ldate|log.Ltime|log.Llongfile) logger.Println("hello") logger.Println("oh....") logger.Fatal("test") logger.Fatal("test2")}
在log檔案中顯示的是:
2013/03/16 17:28:18 /Users/cybercare/go/src/test1/main.go:18: hello2013/03/16 17:28:18 /Users/cybercare/go/src/test1/main.go:19: oh....2013/03/16 17:28:18 /Users/cybercare/go/src/test1/main.go:20: test
日誌當然也可以不記錄在檔案中,預設是不記錄在檔案中的:
下面是一個例子:linux下通過go語言獲得系統進程cpu使用方式,這段代碼通過linux的系統命令 ps來分析cpu的使用方式
代碼出處:http://www.sharejs.com/codes/go/5662
package mainimport( "bytes" "log" "os/exec" "strconv" "strings")type Process struct{ pid int cpu float64}func main(){ cmd:=exec.Command("ps","aux") var out bytes.Buffer cmd.Stdout=&out err:=cmd.Run() if err!=nil{ log.Fatal(err) } processes:=make([]*Process,0) for{ line,err:=out.ReadString('\n') if err!=nil{ break } tokens:=strings.Split(line,"") ft:=make([]string,0) for _,t:=range tokens{ if t!=""&&t!="\t"{ ft=append(ft,t) } } log.Println(len(ft),ft) pid,err:=strconv.Atoi(ft[1]) if err!=nil{ continue } cpu,err:=strconv.ParseFloat(ft[2],64) if err!=nil{ log.Fatal(err) } processes=append(processes,&Process{pid,cpu}) } for _,p:=range processes{ log.Println("Process",p.pid,"takes",p.cpu,"%oftheCPU") }}