【Go】标准log库

178 阅读1分钟

本文主要介绍Go自带的log库

打印日志

log.Print() # 打印日志
log.Fatal() # 打印日志,并调用 os.Exit(1)
log.Panic() # 打印日志,并调用 panic()

同时提供两种便捷的方法来打印日志,设计与fmt.Print一样,分别是

log.Println() # ln尾缀,line的缩写,表示在末尾换行
log.Printf() # f尾缀,format的缩写,表示格式化打印

示例一

package main

import "log"

func main() {
   log.Println("hello world")
}

输出

2023/01/06 09:00:47 hello world

打印出现日志的位置

通过log.SetFlags方法,输出所在的文件及位置

示例二

package main

import "log"

func main() {
   log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Llongfile)
   log.Println("hello world")
}

输出

2023/01/06 09:11:30.466220 /Users/yc/go/src/go_playground/basic_learning/example/main.go:7: hello world

设置标识头

通过log.SetPrefix方法,来设置标识头

示例三

package main

import "log"

func main() {
   log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Llongfile)
   log.SetPrefix("【user】")
   log.Println("hello world")
}

输出

user】2023/01/06 09:16:29.429620 /Users/yc/go/src/go_playground/basic_learning/example/main.go:8: hello world

日志输出到文件

通过log.SetOutput()进行设置

示例四

package main

import (
   "log"
   "os"
)

func main() {
   log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Llongfile)
   log.SetPrefix("【user】")
   logFile, err := os.OpenFile("svc.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
   if err != nil {
      log.Fatal("cannot open log file")
   }
   log.SetOutput(logFile)
   log.Println("hello world")
}

输出

image.png

同时输出日志到标准输出和文件

使用io.MultiWriter方式,聚合两个输出对象

示例五

package main

import (
   "io"
   "log"
   "os"
)

func main() {
   log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Llongfile)
   log.SetPrefix("【user】")
   logFile, err := os.OpenFile("svc.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
   if err != nil {
      log.Fatal("cannot open log file")
   }

   log.SetOutput(io.MultiWriter(logFile, os.Stdout))
   log.Println("hello world")
}