zoukankan      html  css  js  c++  java
  • 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")
        }
    }

    读写文件的操作例子可以解决:

    golang 读写文件 
    http://www.dotcoo.com/golang-file-demo

    
    
  • 相关阅读:
    LeetCode 32.使数组唯一的最小增量
    LeetCode 31. 最小的k个数 快速排序+堆排序+二叉搜索树
    LeetCode 30. 最长回文串
    LeetCode 29. 矩形重叠 反向思维
    LeetCode 28. 拼写单词 HashMap赋值给另一个HashMap
    LeetCode 27. 字符串压缩
    Java SSM Spring+Spring MVC+Mybatis整合
    LeetCode 26.岛屿的最大面积 DFS深度遍历问题
    LeetCode 25.最长上升子序列 动态规划
    LeetCode 24.找出数组中出现次数大于二分之一数组长度的数
  • 原文地址:https://www.cnblogs.com/ghj1976/p/2965047.html
Copyright © 2011-2022 走看看