From c9ace7c10513ad67da4dab7899c30886c77a27fd Mon Sep 17 00:00:00 2001
From: loveuer <loveuer@live.com>
Date: Thu, 6 Jun 2024 10:39:16 +0800
Subject: [PATCH] feat: update log package

---
 log/default.go | 19 +++++++++++++++++++
 log/log.go     | 25 +++++++++++++++++++++++++
 log/new.go     | 21 +++++++++++++++++++++
 3 files changed, 65 insertions(+)
 create mode 100644 log/new.go

diff --git a/log/default.go b/log/default.go
index 3045e17..6ab24ee 100644
--- a/log/default.go
+++ b/log/default.go
@@ -12,6 +12,15 @@ var (
 		fmt.Printf(prefix+"| "+timestamp+" | "+msg+"\n", data...)
 	}
 
+	panicLogger = func(prefix, timestamp, msg string, data ...any) {
+		panic(fmt.Sprintf(prefix+"| "+timestamp+" | "+msg+"\n", data...))
+	}
+
+	fatalLogger = func(prefix, timestamp, msg string, data ...any) {
+		fmt.Printf(prefix+"| "+timestamp+" | "+msg+"\n", data...)
+		os.Exit(1)
+	}
+
 	defaultLogger = &logger{
 		Mutex:      sync.Mutex{},
 		timeFormat: "2006-01-02T15:04:05",
@@ -21,6 +30,8 @@ var (
 		info:       normalLogger,
 		warn:       normalLogger,
 		error:      normalLogger,
+		panic:      panicLogger,
+		fatal:      fatalLogger,
 	}
 )
 
@@ -46,3 +57,11 @@ func Warn(msg string, data ...any) {
 func Error(msg string, data ...any) {
 	defaultLogger.Error(msg, data...)
 }
+
+func Panic(msg string, data ...any) {
+	defaultLogger.Panic(msg, data...)
+}
+
+func Fatal(msg string, data ...any) {
+	defaultLogger.Fatal(msg, data...)
+}
diff --git a/log/log.go b/log/log.go
index 11bae63..9e55695 100644
--- a/log/log.go
+++ b/log/log.go
@@ -14,6 +14,8 @@ const (
 	LogLevelInfo
 	LogLevelWarn
 	LogLevelError
+	LogLevelPanic
+	LogLevelFatal
 )
 
 type logger struct {
@@ -25,10 +27,13 @@ type logger struct {
 	info       func(prefix, timestamp, msg string, data ...any)
 	warn       func(prefix, timestamp, msg string, data ...any)
 	error      func(prefix, timestamp, msg string, data ...any)
+	panic      func(prefix, timestamp, msg string, data ...any)
+	fatal      func(prefix, timestamp, msg string, data ...any)
 }
 
 var (
 	red    = color.New(color.FgRed)
+	hired  = color.New(color.FgHiRed)
 	green  = color.New(color.FgGreen)
 	yellow = color.New(color.FgYellow)
 	white  = color.New(color.FgWhite)
@@ -67,6 +72,18 @@ func (l *logger) SetLogLevel(level LogLevel) {
 	} else {
 		l.error = normalLogger
 	}
+
+	if level > LogLevelPanic {
+		l.panic = nilLogger
+	} else {
+		l.panic = panicLogger
+	}
+
+	if level > LogLevelFatal {
+		l.fatal = nilLogger
+	} else {
+		l.fatal = fatalLogger
+	}
 }
 
 func (l *logger) Debug(msg string, data ...any) {
@@ -85,6 +102,14 @@ func (l *logger) Error(msg string, data ...any) {
 	l.error(red.Sprint("Error "), time.Now().Format(l.timeFormat), msg, data...)
 }
 
+func (l *logger) Panic(msg string, data ...any) {
+	l.panic(hired.Sprint("Panic "), time.Now().Format(l.timeFormat), msg, data...)
+}
+
+func (l *logger) Fatal(msg string, data ...any) {
+	l.fatal(hired.Sprint("Fatal "), time.Now().Format(l.timeFormat), msg, data...)
+}
+
 type WroteLogger interface {
 	Info(msg string, data ...any)
 }
diff --git a/log/new.go b/log/new.go
new file mode 100644
index 0000000..204fac1
--- /dev/null
+++ b/log/new.go
@@ -0,0 +1,21 @@
+package log
+
+import (
+	"os"
+	"sync"
+)
+
+func New() *logger {
+	return &logger{
+		Mutex:      sync.Mutex{},
+		timeFormat: "2006-01-02T15:04:05",
+		writer:     os.Stdout,
+		level:      LogLevelInfo,
+		debug:      nilLogger,
+		info:       normalLogger,
+		warn:       normalLogger,
+		error:      normalLogger,
+		panic:      panicLogger,
+		fatal:      fatalLogger,
+	}
+}