默认的Go Logger
# 1. 默认的Go Logger
在介绍Uber-go的zap包之前,让我们先看看Go语言提供的基本日志功能。Go语言提供的默认日志包是https://golang.org/pkg/log/ (opens new window)。
# 实现Go Logger
实现一个Go语言中的日志记录器非常简单——创建一个新的日志文件,然后设置它为日志的输出位置。
# 1. 设置Logger
我们可以像下面的代码一样设置日志记录器
// SetupLogger 定义日志
func SetupLogger() {
logFileLocation, _ := os.OpenFile("C:\\Users\\Bee\\Desktop\\test.log", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0744)
log.SetOutput(logFileLocation)
}
1
2
3
4
5
2
3
4
5
# 2. 使用Logger
让我们来写一些虚拟的代码来使用这个日志记录器。
在当前的示例中,我们将建立一个到URL的HTTP连接,并将状态代码/错误记录到日志文件中。
// 测试日志
func simpleHttpGet(url string) {
resp, err := http.Get(url)
if err != nil {
log.Printf("Error fetching url %s : %s", url, err.Error())
} else {
log.Printf("Status Code for %s : %s", url, resp.Status)
resp.Body.Close()
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 3. Logger的运行
现在让我们执行上面的代码并查看日志记录器的运行情况。
func main() {
// 1. 定义日志
SetupLogger()
// 2. 使用测试
simpleHttpGet("www.google.com")
simpleHttpGet("http://www.google.com")
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
当我们执行上面的代码,我们能看到一个test.log
文件被创建,下面的内容会被添加到这个日志文件中。
2023/02/27 22:03:16 Error fetching url www.google.com : Get "www.google.com": unsupported protocol scheme ""
2023/02/27 22:03:37 Error fetching url http://www.google.com : Get "http://www.google.com": dial tcp 162.125.34.133:80: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
1
2
2
# 示例代码
package main
import (
"log"
"net/http"
"os"
)
// SetupLogger 定义日志
func SetupLogger() {
// 在目录生会生成文件
logFileLocation, _ := os.OpenFile("C:\\Users\\Bee\\Desktop\\test.log", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0744)
log.SetOutput(logFileLocation)
}
// 测试日志
func simpleHttpGet(url string) {
resp, err := http.Get(url)
if err != nil {
log.Printf("Error fetching url %s : %s", url, err.Error())
} else {
log.Printf("Status Code for %s : %s", url, resp.Status)
resp.Body.Close()
}
}
func main() {
// 1. 定义日志
SetupLogger()
// 2. 使用测试
simpleHttpGet("www.google.com")
simpleHttpGet("http://www.google.com")
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# Go Logger的优势和劣势
# 优势
它最大的优点是使用非常简单。我们可以设置任何io.Writer
作为日志记录输出并向其发送要写入的日志。
# 劣势
仅限基本的日志级别
只有一个
Print
选项。不支持INFO
/DEBUG
等多个级别。对于错误日志,它有
Fatal
和Panic
Fatal日志通过调用
os.Exit(1)
来结束程序Panic日志在写入日志消息之后抛出一个panic
但是它缺少一个ERROR日志级别,这个级别可以在不抛出panic或退出程序的情况下记录错误
缺乏日志格式化的能力——例如记录调用者的函数名和行号,格式化日期和时间格式。等等。
不提供日志切割的能力。
编辑 (opens new window)