默认的 Go Logger
package main
import (
"log"
"net/http"
"os"
)
func main() {
SetupLogger()
simpleHttpGet("www.google.com")
simpleHttpGet("http://www.google.com")
}
func SetupLogger() {
logFileLocation, _ := os.OpenFile("./test.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0744)
log.SetOutput(logFileLocation)
}
func simpleHttpGet(url string) {
response, 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, response.Status)
response.Body.Close()
}
}
运行main.go,在同级目录下的test.log中显示
2023/01/28 15:05:51 Error fetching url:www.google.com : Get "www.google.com": unsupported protocol scheme ""
2023/01/28 15:06:13 Error fetching url:http://www.google.com : Get "http://www.google.com": dial tcp 31.13.95.17: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.
Uber-go Zap
Logger和Sugared Logger
下面是实现sugared logger的代码
package main
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"net/http"
"os"
)
var sugarLogger *zap.SugaredLogger
func main() {
InitLogger()
defer sugarLogger.Sync()
simpleHttpGet("www.baidu.com")
simpleHttpGet("http://www.baidu.com")
}
func InitLogger() {
writeSyncer := getLogWriter()
encoder := getEncoder()
core := zapcore.NewCore(encoder, writeSyncer, zapcore.DebugLevel)
logger := zap.New(core, zap.AddCaller())
sugarLogger = logger.Sugar()
}
func getEncoder() zapcore.Encoder {
encoderConfig := zap.NewProductionEncoderConfig()
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
return zapcore.NewConsoleEncoder(encoderConfig)
}
func getLogWriter() zapcore.WriteSyncer {
file, _ := os.Create("./test.log")
return zapcore.AddSync(file)
}
func simpleHttpGet(url string) {
sugarLogger.Debugf("Trying to hit GET request for %s", url)
response, err := http.Get(url)
if err != nil {
sugarLogger.Errorf("Error fetching URL %s : Error = %s", url, err)
} else {
sugarLogger.Infof("Success!statusCode = %s for URL %s", response.Status, url)
response.Body.Close()
}
}
运行main.go,在同级目录下的test.log中显示
2023-01-28T15:56:29.104+0800 DEBUG zap/main.go:41 Trying to hit GET request for www.baidu.com
2023-01-28T15:56:29.120+0800 ERROR zap/main.go:44 Error fetching URL www.baidu.com : Error = Get "www.baidu.com": unsupported protocol scheme ""
2023-01-28T15:56:29.120+0800 DEBUG zap/main.go:41 Trying to hit GET request for http://www.baidu.com
2023-01-28T15:56:29.185+0800 INFO zap/main.go:46 Success!statusCode = 200 OK for URL http://www.baidu.com