Monday 13 May 2024

GOLANG how to use zap for logger && how to add zap logger to net/http && how to use string

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!")
}



 Output
2023-05-15T16:15:05.466+0100    INFO    Hello from Zap!
 Output
{"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