1

Go语言 常用日志记录方法

 1 year ago
source link: https://studygolang.com/articles/1168?fr=sidebar
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Go语言 常用日志记录方法

abv123456789 · 2014-10-10 12:00:00 · 10593 次点击 · 预计阅读时间 2 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2014-10-10 12:00:00 的文章,其中的信息可能已经有所发展或是发生改变。

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

有疑问加站长微信联系(非本文作者)

280

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK