Go log包 使用详解

25 min read

Log 包是 Golang 内置的日志库,可以方便我们打印日志信息。本文将从以下几点介绍 Log 包的使用。

  1. 引入 log 包

我们可以使用 import 关键字来引入 log 包。

import "log"
  1. 打印日志

Log 包提供了多个用于打印日志的函数,其中最常用的是 Print、Printf、Println。

Print:打印一个或多个值,不带任何格式化。

log.Print("Hello, World!")

Printf:根据指定的格式,将一个或多个值转换成字符串并打印。

log.Printf("My name is %s, and I am %d years old","Alice", 23)

Println:打印一个或多个值,并以换行符结束。

log.Println("Hello, World!")
  1. 日志级别

Log 包提供了多个日志级别,从高到低分别为:

  • Panic
  • Fatal
  • Error
  • Warn
  • Info
  • Debug
  • Trace

不同级别的日志会根据配置显示或隐藏,例如只显示 Error 级别以上的日志等。

  1. 配置日志输出位置

Log 包默认将日志输出到控制台(标准错误流),但我们可以通过配置来将日志输出到文件等其它位置。

可以使用 log.SetOutput() 函数进行配置,例如将日志输出到文件:

f, err := os.OpenFile("/var/log/myapp.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
    log.Fatal("Could not open log file", err)
}
defer f.Close()
log.SetOutput(f)
  1. 配置日志前缀

通过设定日志前缀可以方便我们在日志中区分不同的输出。

可以使用 log.SetPrefix() 函数进行配置:

log.SetPrefix("[MyApp]")

这样就会在每条日志输出前添加 [MyApp] 前缀。

  1. 配置日志日期与时间格式

可以使用 log.SetFlags() 函数来设定日期、时间输出格式。

log.SetFlags(log.Ldate | log.Ltime)

以上代码将日期和时间都输出到日志中。您还可以使用其他标志:

  • Ldate:日期
  • Ltime:时间
  • Lmicroseconds:微秒级时间
  • Llongfile:完整路径的文件名和行号: /a/b/c/d.go:23
  • Lshortfile:最后一个元素的文件名和行号: d.go:23

对于更复杂的日志格式,也可以使用 log.New() 函数来创建一个定制的 Logger。

  1. 安全退出

如果出现严重的错误,可以使用 log.Panic() 或 log.Fatal() 函数来跑出一个 panic 或退出程序。

Panic 会打印日志信息并退出程序。Fatal 也会打印日志信息,并通过 os.Exit(1) 退出程序。

建议使用 log.Fatal(),因为它可以确保日志被正确输出。而使用 panic() 会导致日志信息可能丢失。

  1. 总结

通过以上几点介绍,相信您已经了解了如何使用 Log 包来打印日志信息,并进行相关的配置。Log 包不仅使用简单,且功能完备,是您开发 Golang 应用程序的不二之选。