https://betterstack.com/community/guides/logging/go/zap/#logging-with-zap-in-a-go-application
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
"os"
)
func createLogger() *zap.Logger { stdout := zapcore.AddSync(os.Stdout) file := zapcore.AddSync(&lumberjack.Logger{ Filename: "logs/app.log", MaxSize: 10, // megabytes MaxBackups: 3, MaxAge: 7, // days }) level := zap.NewAtomicLevelAt(zap.InfoLevel) productionCfg := zap.NewProductionEncoderConfig() productionCfg.TimeKey = "timestamp" productionCfg.EncodeTime = zapcore.ISO8601TimeEncoder developmentCfg := zap.NewDevelopmentEncoderConfig() developmentCfg.EncodeLevel = zapcore.CapitalColorLevelEncoder consoleEncoder := zapcore.NewConsoleEncoder(developmentCfg) fileEncoder := zapcore.NewJSONEncoder(productionCfg) core := zapcore.NewTee( zapcore.NewCore(consoleEncoder, stdout, level), zapcore.NewCore(fileEncoder, file, level), ) return zap.New(core) } func main() { logger := createLogger() defer logger.Sync() logger.Info("Hello from Zap!") }
2023-05-15T16:15:05.466+0100 INFO Hello from Zap!
{"level":"info","timestamp":"2023-05-15T16:15:05.466+0100","msg":"Hello from Zap!"}
how to add logger to net/http
https://stackoverflow.com/questions/52294334/net-http-set-custom-logger
import (
"fmt"
"net/http"
"os"
"log"
"go.uber.org/zap"
"file-server/utilSrv"
)
type fwdToZapWriter struct {
logger *zap.Logger
}
func (fw *fwdToZapWriter) Write(p []byte) (n int, err error) {
fw.logger.Info(string(p))
return len(p), nil
}
func myServer {
var logger *zap.Logger
logger = utilSrv.CreateLogger()
defer logger.Sync()
server := &http.Server{
Addr: addr,
Handler: handler,
ErrorLog:
log.New
(&fwdToZapWriter{
logger
}, "", 0),
}
}
how to print strings using logger.Info in ZAP:
https://stackoverflow.com/questions/6012692/a-way-to-get-the-value-of-os-error-string-value-go
https://stackoverflow.com/questions/73545791/golang-temporal-logging-concatenation-vs-string-format
// when err is string
logger.Info(fmt.Sprintf("Failed : %v", err))
// when err is Error
logger.Info(err.Error())
No comments:
Post a Comment