generated from alecodes/base-template
88 lines
1.6 KiB
Go
88 lines
1.6 KiB
Go
package logger
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
const (
|
|
verbose = 1 << iota
|
|
info
|
|
error
|
|
debug
|
|
)
|
|
|
|
func getLogger(level int, prefix string) *log.Logger {
|
|
var output io.Writer
|
|
|
|
if level == error {
|
|
output = os.Stderr
|
|
} else {
|
|
output = os.Stdout
|
|
}
|
|
|
|
// TODO: get from config
|
|
configLevel := debug
|
|
|
|
if configLevel < level {
|
|
output = io.Discard
|
|
}
|
|
|
|
prefix = fmt.Sprintf("%-*s", 6, prefix)
|
|
|
|
logger := log.New(output, prefix, log.Ldate|log.Ltime|log.Lmicroseconds|log.Lmsgprefix)
|
|
|
|
return logger
|
|
}
|
|
|
|
func logMessage(level string, message string) {
|
|
currentLevel := viper.GetString("log_level")
|
|
|
|
levels := map[string]int{
|
|
"verbose": 1,
|
|
"info": 2,
|
|
"error": 3,
|
|
"debug": 4,
|
|
}
|
|
|
|
if levels[currentLevel] <= levels[level] {
|
|
timestamp := time.Now().Format("2006-01-02 15:04:05")
|
|
prefix := strings.ToUpper(level)
|
|
fmt.Printf("%-7s %s %s\n", prefix, timestamp, message)
|
|
}
|
|
}
|
|
|
|
func Verbose(message string) {
|
|
logger := getLogger(verbose, "VERB")
|
|
logger.Println(message)
|
|
}
|
|
|
|
func Info(message string, args ...any) {
|
|
logger := getLogger(info, "INFO")
|
|
msg := fmt.Sprintf(message, args...)
|
|
logger.Println(msg)
|
|
}
|
|
|
|
func Error(message string, args ...any) {
|
|
logger := getLogger(error, "ERROR")
|
|
msg := fmt.Sprintf(message, args...)
|
|
logger.Println(msg)
|
|
}
|
|
|
|
func Debug(message string, args ...any) {
|
|
logger := getLogger(debug, "DEBUG")
|
|
msg := fmt.Sprintf(message, args...)
|
|
logger.Println(msg)
|
|
}
|
|
|
|
func Fatal(message string, args ...any) {
|
|
logger := getLogger(error, "FATAL")
|
|
msg := fmt.Sprintf(message, args...)
|
|
logger.Fatalln(msg)
|
|
}
|