Compare commits

...

2 Commits

Author SHA1 Message Date
kingecg d13d851819 add support for format 2024-10-01 13:47:50 +08:00
kingecg 8515465587 fix test app 2024-09-21 22:41:52 +08:00
4 changed files with 78 additions and 4 deletions

1
.gitignore vendored
View File

@ -15,3 +15,4 @@
# Dependency directories (remove the comment below to include it) # Dependency directories (remove the comment below to include it)
# vendor/ # vendor/
log/

View File

@ -2,13 +2,21 @@ package gologger
import ( import (
"fmt" "fmt"
"strings"
) )
const logTemplate = "[%s] %s : %s - %s\n" const logTemplate = "[%s] %s : %s - %s\n"
func format(logEvent LogEvent) string { func format(logEvent LogEvent) string {
data := logEvent.Ts.Format("2006-01-02 15:04:05") data := logEvent.Ts.Format("2006-01-02 15:04:05")
msg := fmt.Sprint(logEvent.Data...) msg := ""
firstMsg := logEvent.Data[0]
if isFormatString(firstMsg) {
msg = fmt.Sprintf(firstMsg.(string), logEvent.Data[1:]...)
} else {
msg = sprint(logEvent.Data)
}
ret := fmt.Sprintf(logTemplate, data, logEvent.Category, getLogLevelStr(logEvent.Level), msg) ret := fmt.Sprintf(logTemplate, data, logEvent.Category, getLogLevelStr(logEvent.Level), msg)
return ret return ret
} }
@ -16,8 +24,30 @@ func format(logEvent LogEvent) string {
func getLogLevelStr(level int) string { func getLogLevelStr(level int) string {
for name, slevel := range logLevelMap { for name, slevel := range logLevelMap {
if slevel == level { if slevel == level {
return name return strings.ToUpper(name)
} }
} }
return "Unknown" return "Unknown"
} }
func isFormatString(f interface{}) bool {
s, ok := f.(string)
if !ok {
return false
}
// 尝试使用空接口来格式化字符串
m := fmt.Sprintf(s, []interface{}{})
return strings.Index(m, "MISSING") != -1
}
func sprint(s []interface{}) string {
str := make([]any, len(s))
for i, v := range s {
if i > 0 {
str[i] = fmt.Sprintf(" %v", v)
} else {
str[i] = fmt.Sprintf("%v", v)
}
}
return fmt.Sprint(str...)
}

44
format_test.go Normal file
View File

@ -0,0 +1,44 @@
package gologger
import (
"strings"
"testing"
"time"
)
func TestFormat(t *testing.T) {
tests := []struct {
name string
logEvent LogEvent
want string
}{
{
name: "Info level with format string",
logEvent: LogEvent{
Ts: time.Now(),
Category: "test_category",
Level: Info,
Data: []interface{}{"%s: %v", "key", "value"},
},
want: "test_category : INFO - key: value",
},
{
name: "Error level without format string",
logEvent: LogEvent{
Ts: time.Now(),
Category: "test_category",
Level: Error,
Data: []interface{}{"error occurred", "additional info"},
},
want: "test_category : ERROR - error occurred additional info",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := format(tt.logEvent); strings.Index(got, tt.want) == -1 {
t.Errorf("format() = %v, want %v", got, tt.want)
}
})
}
}

View File

@ -4,7 +4,7 @@ import (
logger "git.pyer.club/kingecg/gologger" logger "git.pyer.club/kingecg/gologger"
) )
func main() { func aqmain() {
logger.Configure(logger.LoggersConfig{ logger.Configure(logger.LoggersConfig{
Categories: map[string]logger.LogConfig{ Categories: map[string]logger.LogConfig{
"default": { "default": {
@ -40,5 +40,4 @@ func main() {
defaultLogger.Debug("debug again") defaultLogger.Debug("debug again")
fatLogger.Debug("debug again") fatLogger.Debug("debug again")
fatLogger.Error("This is error") fatLogger.Error("This is error")
select {}
} }