Go语言 常用日志记录方法

前端之家收集整理的这篇文章主要介绍了Go语言 常用日志记录方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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")
}
}

猜你在找的Go相关文章