Skip to content

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

See also

Favorite site