Compare commits
2 Commits
6d89afc6e3
...
d13d851819
Author | SHA1 | Date |
---|---|---|
kingecg | d13d851819 | |
kingecg | 8515465587 |
|
@ -15,3 +15,4 @@
|
|||
# Dependency directories (remove the comment below to include it)
|
||||
# vendor/
|
||||
|
||||
log/
|
34
format.go
34
format.go
|
@ -2,13 +2,21 @@ package gologger
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const logTemplate = "[%s] %s : %s - %s\n"
|
||||
|
||||
func format(logEvent LogEvent) string {
|
||||
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)
|
||||
return ret
|
||||
}
|
||||
|
@ -16,8 +24,30 @@ func format(logEvent LogEvent) string {
|
|||
func getLogLevelStr(level int) string {
|
||||
for name, slevel := range logLevelMap {
|
||||
if slevel == level {
|
||||
return name
|
||||
return strings.ToUpper(name)
|
||||
}
|
||||
}
|
||||
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...)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
|
@ -4,7 +4,7 @@ import (
|
|||
logger "git.pyer.club/kingecg/gologger"
|
||||
)
|
||||
|
||||
func main() {
|
||||
func aqmain() {
|
||||
logger.Configure(logger.LoggersConfig{
|
||||
Categories: map[string]logger.LogConfig{
|
||||
"default": {
|
||||
|
@ -40,5 +40,4 @@ func main() {
|
|||
defaultLogger.Debug("debug again")
|
||||
fatLogger.Debug("debug again")
|
||||
fatLogger.Error("This is error")
|
||||
select {}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue