keysd_rs 0.1.0

gPRC based keysd integration library
Documentation
package client

import (
	"context"
	pkglog "log"
	"os"
)

var logger = newLogFromEnv()

//var logger = newContextLogFromEnv()

// SetLogger sets logger for the package.
func SetLogger(l Logger) {
	logger = l
}

// // SetContextLogger sets logger for the package.
// func SetContextLogger(l ContextLogger) {
// 	logger = l
// }

// Logger interface used in this package.
type Logger interface {
	Debugf(format string, args ...interface{})
	Infof(format string, args ...interface{})
	Warningf(format string, args ...interface{})
	Errorf(format string, args ...interface{})
	Fatalf(format string, args ...interface{})
}

// LogLevel ...
type LogLevel int

const (
	// DebugLevel ...
	DebugLevel LogLevel = 3
	// InfoLevel ...
	InfoLevel LogLevel = 2
	// WarnLevel ...
	WarnLevel LogLevel = 1
	// ErrLevel ...
	ErrLevel LogLevel = 0
)

// NewLogger ...
func NewLogger(lev LogLevel) Logger {
	return &defaultLog{Level: lev}
}

func newLogFromEnv() Logger {
	return NewLogger(parseLogLevel(os.Getenv("LOG")))
}

func parseLogLevel(s string) LogLevel {
	switch s {
	case "debug":
		return DebugLevel
	case "info":
		return InfoLevel
	case "warn":
		return WarnLevel
	default:
		return ErrLevel
	}
}

type defaultLog struct {
	Level LogLevel
}

func (l defaultLog) Debugf(format string, args ...interface{}) {
	if l.Level >= 3 {
		pkglog.Printf("[DEBG] "+format+"\n", args...)
	}
}

func (l defaultLog) Infof(format string, args ...interface{}) {
	if l.Level >= 2 {
		pkglog.Printf("[INFO] "+format+"\n", args...)
	}
}

func (l defaultLog) Warningf(format string, args ...interface{}) {
	if l.Level >= 1 {
		pkglog.Printf("[WARN] "+format+"\n", args...)
	}
}

func (l defaultLog) Errorf(format string, args ...interface{}) {
	if l.Level >= 0 {
		pkglog.Printf("[ERR]  "+format+"\n", args...)
	}
}

func (l defaultLog) Fatalf(format string, args ...interface{}) {
	pkglog.Fatalf(format, args...)
}

// ContextLogger interface used in this package with request context.
type ContextLogger interface {
	Debugf(ctx context.Context, format string, args ...interface{})
	Infof(ctx context.Context, format string, args ...interface{})
	Warningf(ctx context.Context, format string, args ...interface{})
	Errorf(ctx context.Context, format string, args ...interface{})
}

// NewContextLogger ...
func NewContextLogger(lev LogLevel) ContextLogger {
	return &defaultContextLog{Level: lev}
}

type defaultContextLog struct {
	Level LogLevel
}

func (l defaultContextLog) Debugf(ctx context.Context, format string, args ...interface{}) {
	if l.Level >= 3 {
		pkglog.Printf("[DEBG] "+format+"\n", args...)
	}
}

func (l defaultContextLog) Infof(ctx context.Context, format string, args ...interface{}) {
	if l.Level >= 2 {
		pkglog.Printf("[INFO] "+format+"\n", args...)
	}
}

func (l defaultContextLog) Warningf(ctx context.Context, format string, args ...interface{}) {
	if l.Level >= 1 {
		pkglog.Printf("[WARN] "+format+"\n", args...)
	}
}

func (l defaultContextLog) Errorf(ctx context.Context, format string, args ...interface{}) {
	if l.Level >= 0 {
		pkglog.Printf("[ERR]  "+format+"\n", args...)
	}
}