使用golang log库包实现日志文件输出

这次聊聊golang日志模块的详细用法。golang的日志输出一般用的是标准库log库包。 话说Golang的log实现的功能跟别语言的日志没啥区别。

该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。

http://xiaorui.cc/?p=2972

 

下面是golang log库包的几个重要函数说明.

xiaorui.cc

//定义logger, 传入参数 文件,前缀字符串,flag标记
func New(out io.Writer, prefix string, flag int) *Logger

//设置flag格式
func SetFlags(flag int)

//配置log的输出格式
func SetPrefix(prefix string)

下面是golang log包参数中flag的用法。 flag有根据时间的,也有根据code行号的。

Ldate         = 1 << iota     // the date: 2009/01/23 形如 2009/01/23 的日期
Ltime                         // the time: 01:23:23   形如 01:23:23   的时间
Lmicroseconds                 // microsecond resolution: 01:23:23.123123.  形如01:23:23.123123   的时间
Llongfile                     // full file name and line number: /a/b/c/d.go:23 全路径文件名和行号
Lshortfile                    // final file name element and line number: d.go:23. overrides Llongfile 文件名和行号
LstdFlags     = Ldate | Ltime // 日期和时间

废话不多说,直接通过一个完整的实例说明golang log实例。

#xiaorui.cc
package main
import (
    "log"
    "os"
)
func main(){
    // 定义一个文件
    fileName := "ll.log"
    logFile,err  := os.Create(fileName)
    defer logFile.Close()
    if err != nil {
        log.Fatalln("open file error !")
    }
    // 创建一个日志对象
    debugLog := log.New(logFile,"[Debug]",log.LstdFlags)
    debugLog.Println("A debug message here")
    //配置一个日志格式的前缀
    debugLog.SetPrefix("[Info]")
    debugLog.Println("A Info Message here ")
    //配置log的Flag参数
    debugLog.SetFlags(debugLog.Flags() | log.LstdFlags)
    debugLog.Println("A different prefix")
}

在github中找到了一个老外封装的go-logging库包,还真是特别好用。 go-logging可自定义日志输出的格式和颜色。

#http://xiaorui.cc
package main

import (
    "os"
    "fmt"
    "github.com/op/go-logging"
)

var log = logging.MustGetLogger("example")

var format = logging.MustStringFormatter(
    `%{color}%{time:15:04:05.000} %{shortfunc} > %{level:.4s} %{id:03x}%{color:reset} %{message}`,
)

type Password string

func (p Password) Redacted() interface{} {
    return logging.Redact(string(p))
}

func main() {
    logFile, err := os.OpenFile("log.txt", os.O_WRONLY,0666)
    if err != nil{
        fmt.Println(err)
    }
    backend1 := logging.NewLogBackend(logFile, "", 0)
    backend2 := logging.NewLogBackend(os.Stderr, "", 0)

    backend2Formatter := logging.NewBackendFormatter(backend2, format)
    backend1Leveled := logging.AddModuleLevel(backend1)
    backend1Leveled.SetLevel(logging.INFO, "")

    logging.SetBackend(backend1Leveled, backend2Formatter)

    log.Debugf("debug %s", Password("secret"))
    log.Info("info")
    log.Notice("notice")
    log.Warning("warning")
    log.Error("xiaorui.cc")
    log.Critical("太严重了")
}

上面的go-logging代码运行后的输出:

[ruifengyun@devops ~ ]go run l.go
18:26:36.456 main ▶ DEBU 001 debug ******
18:26:36.456 main ▶ INFO 002 info
18:26:36.456 main ▶ NOTI 003 notice
18:26:36.456 main ▶ WARN 004 warning
18:26:36.456 main ▶ ERRO 005 xiaorui.cc
18:26:36.456 main ▶ CRIT 006 太严重了
[ruifengyun@devops ~ ] cat log.txt
info
notice
warning
xiaorui.cc
太严重了

看看下面的日志有颜色效果吧…. 有点意思…

END.


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

发表评论

邮箱地址不会被公开。 必填项已用*标注