一、go的log模块

go的标准库提供了log机制,模块较简单,输出的位置有做线程安全。http://golang.org/pkg/log/

二、log模块接口

1、Print

log.Print :表示其参数的调用方式和fmt.Print 是类似的,即输出对象而不用给定特别的标志符号。

log.Printf : 表示其参数的调用方式和 fmt.Printf是类似的,即可以用C系列的格式化标志表示输出对象的类型,具体类型表示 可以参考fmt.Printf的文档。

log.Println: 表示其调用方式和fmt.Println 类似,其和log.Print基本一致,仅仅是在输出的时候多输出一个换行。

示例:

  1. package main
  2. import log
  3. func main(){
  4. arr:= []int{2,3}
  5. log.Print("Print arr",arr,"\n")
  6. log.Println("Print arr",arr)
  7. log.Printf("Printf arr [%d,%d]",arr[0],arr[1])
  8. }

输出结果

  1. 2014/05/02 12:27:19 Print arr [2 3]
  2. 2014/05/02 12:27:19 Println arr [2 3]
  3. 2014/05/02 12:27:19 Printf arr [2,3]
2、Panic

log.PanicXxx,看该函数的说明,其相当于再把日志内容刷到标准错误后调用 panic函数(不清楚Golan的defer-recover-panic机制可以Golang Blog去学习一下)。这里举个常用的例子:

3、Fatal

调用log.Fatal接口后,会先将日志内容打印到标准输出,接着调用系统的 os.exit(1)接口,退出程序返回状态为 “1”

4、自定义Logger类型

该类型提供了一个New方法用来创建对象。

  1. func New(out io.Writer,prefix string,flag int) *Logger

输出位置out,是一个io.Writer对象,该对象可以是一个文件也可以是实现了该接口的对象。通常我们可以用这个来指定 其输出到哪个文件

prefix 我们在前面已经看到,就是在日志内容前面的内容。我们可以将其置为 “[Info]” 、 “[Warning]”等来帮助区分日志 级别。

flags 较为迷惑,其实际上就是一个选项,可选的值有:

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

表示在日志内容开头,我们暂且称之为日志抬头,打印出相关内容。对于上面的默认格式就是 LstdFlags 打印出日期和时间。
该方法还定义了如上一些同名方法。

  1. func (l *Logger) Print(v ...interface{})
  2. func (l *Logger) Printf(format string, v ...interface{})
  3. func (l *Logger) Println(v ...interface{})
  4. func (l *Logger) Fatal(v ...interface{})
  5. func (l *Logger) Fatalf(format string, v ...interface{})
  6. func (l *Logger) Fatalln(v ...interface{})
  7. func (l *Logger) Panic(v ...interface{})
  8. func (l *Logger) Panicf(format string, v ...interface{})
  9. func (l *Logger) Panicln(v ...interface{})
  10. func (l *Logger) Flags() int
  11. func (l *Logger) Prefix() string
  12. func (l *Logger) SetFlags(flag int)
  13. func (l *Logger) SetPrefix(prefix string)

其中 “Print 、Panic 、Fatal ” 系列函数和之前介绍的一样,Flags和Prefix分别可以获得log.Logger当前的日志抬头和前缀。 SetFlags ,SetPrefix 则可以用来设置日志抬头和前缀。

示例:

  1. package main
  2. import (
  3. "log"
  4. "os"
  5. )
  6. func main(){
  7. fileName := "xxx_debug.log"
  8. logFile,err := os.Create(fileName)
  9. defer logFile.Close()
  10. if err != nil {
  11. log.Fatalln("open file error !")
  12. }
  13. debugLog := log.New(logFile,"[Debug]",log.Llongfile)
  14. debugLog.Println("A debug message here")
  15. debugLog.SetPrefix("[Info]")
  16. debugLog.Println("A Info Message here ")
  17. debugLog.SetFlags(debugLog.Flags() | log.LstdFlags)
  18. debugLog.Println("A different prefix")
  19. }
文档更新时间: 2022-12-08 09:23   作者:张尚