cosmium/internal/logger/logger.go

125 lines
2.3 KiB
Go
Raw Normal View History

package logger
import (
2025-01-15 00:23:54 +02:00
"fmt"
"log"
"os"
2025-01-15 00:23:54 +02:00
"runtime"
"strings"
)
2025-01-09 21:07:41 +02:00
type LogLevelType int
var (
LogLevelDebug LogLevelType = 0
LogLevelInfo LogLevelType = 1
LogLevelError LogLevelType = 2
LogLevelSilent LogLevelType = 10
)
type LogWriter struct {
WriterLevel LogLevelType
}
var LogLevel = LogLevelInfo
2025-01-15 00:23:54 +02:00
var DebugLogger = log.New(os.Stdout, "", log.Ldate|log.Ltime)
var InfoLogger = log.New(os.Stdout, "", log.Ldate|log.Ltime)
2025-01-15 00:23:54 +02:00
var ErrorLogger = log.New(os.Stderr, "", log.Ldate|log.Ltime)
2025-01-09 21:07:41 +02:00
func DebugLn(v ...any) {
if LogLevel <= LogLevelDebug {
2025-01-15 00:23:54 +02:00
prefix := getCallerPrefix()
DebugLogger.Println(append([]interface{}{prefix}, v...)...)
}
}
2025-01-09 21:07:41 +02:00
func Debug(v ...any) {
if LogLevel <= LogLevelDebug {
2025-01-15 00:23:54 +02:00
prefix := getCallerPrefix()
DebugLogger.Println(append([]interface{}{prefix}, v...)...)
2025-01-09 21:07:41 +02:00
}
}
func Debugf(format string, v ...any) {
2025-01-09 21:07:41 +02:00
if LogLevel <= LogLevelDebug {
2025-01-15 00:23:54 +02:00
prefix := getCallerPrefix()
DebugLogger.Printf(prefix+format, v...)
}
}
2025-01-09 21:07:41 +02:00
func InfoLn(v ...any) {
if LogLevel <= LogLevelInfo {
InfoLogger.Println(v...)
}
}
func Info(v ...any) {
2025-01-09 21:07:41 +02:00
if LogLevel <= LogLevelInfo {
InfoLogger.Print(v...)
}
}
func Infof(format string, v ...any) {
2025-01-09 21:07:41 +02:00
if LogLevel <= LogLevelInfo {
InfoLogger.Printf(format, v...)
}
}
func ErrorLn(v ...any) {
if LogLevel <= LogLevelError {
2025-01-15 00:23:54 +02:00
prefix := getCallerPrefix()
ErrorLogger.Println(append([]interface{}{prefix}, v...)...)
2025-01-09 21:07:41 +02:00
}
}
func Error(v ...any) {
2025-01-09 21:07:41 +02:00
if LogLevel <= LogLevelError {
2025-01-15 00:23:54 +02:00
prefix := getCallerPrefix()
ErrorLogger.Print(append([]interface{}{prefix}, v...)...)
2025-01-09 21:07:41 +02:00
}
}
func Errorf(format string, v ...any) {
2025-01-09 21:07:41 +02:00
if LogLevel <= LogLevelError {
2025-01-15 00:23:54 +02:00
prefix := getCallerPrefix()
ErrorLogger.Printf(prefix+format, v...)
2025-01-09 21:07:41 +02:00
}
}
func (lw *LogWriter) Write(p []byte) (n int, err error) {
switch lw.WriterLevel {
case LogLevelDebug:
Debug(string(p))
case LogLevelInfo:
Info(string(p))
case LogLevelError:
Error(string(p))
}
return len(p), nil
}
func ErrorWriter() *LogWriter {
return &LogWriter{WriterLevel: LogLevelError}
}
func InfoWriter() *LogWriter {
return &LogWriter{WriterLevel: LogLevelInfo}
}
func DebugWriter() *LogWriter {
return &LogWriter{WriterLevel: LogLevelDebug}
}
2025-01-15 00:23:54 +02:00
func getCallerPrefix() string {
_, file, line, ok := runtime.Caller(2)
if ok {
parts := strings.Split(file, "/")
file = parts[len(parts)-1]
return fmt.Sprintf("%s:%d - ", file, line)
}
return ""
}