Zap
Blazing fast, structured, leveled logging in Go.
Log-Level init
package main
import (
"flag"
"fmt"
"os"
"go.uber.org/zap"
)
func initLogger(logLevel string) (*zap.Logger, error) {
switch logLevel {
case "production":
return zap.NewProduction()
case "development":
return zap.NewDevelopment()
case "debug":
config := zap.NewDevelopmentConfig()
config.Level = zap.NewAtomicLevelAt(zap.DebugLevel)
return config.Build()
case "info":
config := zap.NewProductionConfig()
config.Level = zap.NewAtomicLevelAt(zap.InfoLevel)
return config.Build()
case "warn":
config := zap.NewProductionConfig()
config.Level = zap.NewAtomicLevelAt(zap.WarnLevel)
return config.Build()
case "error":
config := zap.NewProductionConfig()
config.Level = zap.NewAtomicLevelAt(zap.ErrorLevel)
return config.Build()
default:
return zap.NewDevelopment()
}
}
func main() {
var (
logLevel = flag.String("log-level", "development", "Log level (development, production, debug, info, warn, error)")
)
flag.Parse()
logger, err := initLogger(*logLevel)
if err != nil {
fmt.Printf("Failed to initialize logger: %v\n", err)
os.Exit(1)
}
defer logger.Sync()
logger.Info("=== dataops-edge ===")
// ...
}
Example
package main
import (
"go.uber.org/zap"
)
func main() {
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("Hello world", zap.String("key", "value"))
}
출력 결과:
{"level":"info","ts":1704179664.2145793,"caller":"ticker_test/main.go:10","msg":"Hello world","key":"value"}