Go目前標准包中日志只是方便的實現日志記錄的功能,這些日志都是基於fmt包的打印再結合panic之類的函數來進行一般的打印、拋出錯誤處理。
一個簡單的日志記錄代碼例子:
代碼來自:http://www.du52.com/text.php?id=114
package main
import(
"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: hello
2013/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 main
import(
"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")
}
}
讀寫文件的操作例子可以解決:
golang 讀寫文件
http://www.dotcoo.com/golang-file-demo