log
Go语言的log包提供了简单灵活的日志功能,用于记录程序运行时的信息。
1、导入log包
首先,需要在代码中导入log包:
import "log"
2、基本的日志输出
使用log.Println可以输出一行日志:
log.Println("This is a basic log message.")
常用的日志输出方式是使用标准库中的 log 包。
这个包提供了基本的日志功能,允许你输出不同级别的日志信息。
常用的方法有 Print, Printf, Println, Fatal, Fatalf, Fatalln, Panic, Panicf, Panicln。
-
Print系列:这一系列方法用于打印一般的日志信息,不会中断程序的执行。
- log.Print(v ...interface{}):打印一般日志信息,不会换行。
log.Printf(format string, v ...interface{}):按照指定格式打印日志信息。
log.Println(v ...interface{}):打印一般日志信息,并在最后添加换行符。
- Fatal系列:这一系列方法用于打印严重错误信息,并调用 os.Exit(1) 终止程序的执行。
- log.Fatal(v ...interface{}):打印严重错误信息,不会换行,并调用 os.Exit(1) 终止程序执行。
log.Fatalf(format string, v ...interface{}):按照指定格式打印严重错误信息,并调用 os.Exit(1) 终止程序执行。
log.Fatalln(v ...interface{}):打印严重错误信息,并在最后添加换行符,并调用 os.Exit(1) 终止程序执行。
-
Panic系列:这一系列方法用于打印严重错误信息,并调用 panic 函数引发恐慌。
- log.Panic(v ...interface{}):打印严重错误信息,不会换行,并调用 panic 函数引发恐慌。
- log.Panicf(format string, v ...interface{}):按照指定格式打印严重错误信息,并调用 panic 函数引发恐慌。
- log.Panicln(v ...interface{}):打印严重错误信息,并在最后添加换行符,并调用 panic 函数引发恐慌。
可以使用 log.SetOutput 方法来设置日志输出的目标,比如将日志输出到文件中。另外,还可以使用 log.SetFlags 方法来设置日志的格式,比如添加时间信息等。
package main
import (
"log"
"os"
)func main() {
// 设置日志输出到标准输出
log.SetOutput(os.Stdout)// 打印一般日志信息 log.Print("This is a general log message") // 打印严重错误信息并终止程序执行 log.Fatal("This is a fatal error message") // 打印严重错误信息并引发恐慌 log.Panic("This is a panic message")}
3、定制日志输出格式
通过log.SetFlags和log.SetPrefix可以定制日志的输出格式,例如:
log.SetFlags(log.Ldate | log.Ltime) // 添加日期和时间信息
log.SetPrefix("[MyApp] ") // 添加前缀
log.Println("Customized log message.")
4、输出到文件
使用log.SetOutput可以将日志输出到文件,示例中将日志写入log.txt:
file, err := os.Create("log.txt")
if err != nil {
log.Fatal("Unable to create log file:", err)
}
defer file.Close()
log.SetOutput(file)
log.Println("Log message written to file.")
log.SetOutput(file)
log.Println("Log message written to file.")
5、日志级别
Go的log包本身不提供日志级别的概念,但可以通过自定义函数来实现:
const (
LogLevelInfo = iota
LogLevelWarning
LogLevelError
)
func customLog(level int, message string) {
prefix := "["
switch level {
case LogLevelInfo:
prefix += "INFO"
case LogLevelWarning:
prefix += "WARNING"
case LogLevelError:
prefix += "ERROR"
}
prefix += "] "
log.Println(prefix + message)
}
customLog(LogLevelError, "This is an error message.")
6、使用log.Fatal和log.Panic
log.Fatal和log.Panic用于记录致命错误并退出程序。log.Fatal输出日志后会调用os.Exit(1),而log.Panic则会在输出日志后调用panic。
log.Fatal("Fatal error. Program will exit.")
log.Panic("Panic! Program will panic and exit.")
7、示例代码
package main
import (
"log"
"os"
)
const (
LogLevelInfo = iota
LogLevelWarning
LogLevelError
)
func customLog(level int, message string) {
prefix := "["
switch level {
case LogLevelInfo:
prefix += "INFO"
case LogLevelWarning:
prefix += "WARNING"
case LogLevelError:
prefix += "ERROR"
}
prefix += "] "
log.Println(prefix + message)
}
func main() {
log.Println("This is a basic log message.")
log.SetFlags(log.Ldate | log.Ltime)
log.SetPrefix("[MyApp] ")
log.Println("Customized log message.")
file, err := os.Create("log.txt")
if err != nil {
log.Fatal("Unable to create log file:", err)
}
defer file.Close()
log.SetOutput(file)
log.Println("Log message written to file.")
customLog(LogLevelError, "This is an error message.")
log.Fatal("Fatal error. Program will exit.")
// log.Panic("Panic! Program will panic and exit.")
}
8、结果
This is a basic log message.
[MyApp] Customized log message.
Log message written to file.
[ERROR] This is an error message.
Fatal error. Program will exit.
9、注意事项
log包在默认情况下输出到标准错误(os.Stderr)。- 在实际应用中,可以根据需求将日志记录到文件、数据库或其他持久化存储中。
log包是线程安全的,可以在多个goroutine中安全地进行日志记录。
原文链接:https://blog.csdn.net/weixin_49015143/article/details/134784355
浙公网安备 33010602011771号