refactor: clean code
This commit is contained in:
92
internal/pkg/core/logger/builtin.go
Normal file
92
internal/pkg/core/logger/builtin.go
Normal file
@@ -0,0 +1,92 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// 表示默认的日志记录器类型。
|
||||
type DefaultLogger struct {
|
||||
records []string
|
||||
}
|
||||
|
||||
var _ Logger = (*DefaultLogger)(nil)
|
||||
|
||||
func (l *DefaultLogger) Logt(tag string, data ...any) {
|
||||
l.ensureInitialized()
|
||||
|
||||
temp := make([]string, len(data)+1)
|
||||
temp[0] = tag
|
||||
for i, v := range data {
|
||||
s := ""
|
||||
if v == nil {
|
||||
s = "<nil>"
|
||||
} else {
|
||||
switch reflect.ValueOf(v).Kind() {
|
||||
case reflect.String:
|
||||
s = v.(string)
|
||||
case reflect.Bool,
|
||||
reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
|
||||
reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,
|
||||
reflect.Float32, reflect.Float64:
|
||||
s = fmt.Sprintf("%v", v)
|
||||
default:
|
||||
jsonData, _ := json.Marshal(v)
|
||||
s = string(jsonData)
|
||||
}
|
||||
}
|
||||
|
||||
temp[i+1] = s
|
||||
}
|
||||
|
||||
l.records = append(l.records, strings.Join(temp, ": "))
|
||||
}
|
||||
|
||||
func (l *DefaultLogger) Logf(format string, args ...any) {
|
||||
l.ensureInitialized()
|
||||
|
||||
l.records = append(l.records, fmt.Sprintf(format, args...))
|
||||
}
|
||||
|
||||
func (l *DefaultLogger) GetRecords() []string {
|
||||
l.ensureInitialized()
|
||||
|
||||
temp := make([]string, len(l.records))
|
||||
copy(temp, l.records)
|
||||
return temp
|
||||
}
|
||||
|
||||
func (l *DefaultLogger) FlushRecords() {
|
||||
l.records = make([]string, 0)
|
||||
}
|
||||
|
||||
func (l *DefaultLogger) ensureInitialized() {
|
||||
if l.records == nil {
|
||||
l.records = make([]string, 0)
|
||||
}
|
||||
}
|
||||
|
||||
func NewDefaultLogger() *DefaultLogger {
|
||||
return &DefaultLogger{
|
||||
records: make([]string, 0),
|
||||
}
|
||||
}
|
||||
|
||||
// 表示空的日志记录器类型。
|
||||
// 该日志记录器不会执行任何操作。
|
||||
type NilLogger struct{}
|
||||
|
||||
var _ Logger = (*NilLogger)(nil)
|
||||
|
||||
func (l *NilLogger) Logt(string, ...any) {}
|
||||
func (l *NilLogger) Logf(string, ...any) {}
|
||||
func (l *NilLogger) GetRecords() []string {
|
||||
return make([]string, 0)
|
||||
}
|
||||
func (l *NilLogger) FlushRecords() {}
|
||||
|
||||
func NewNilLogger() *NilLogger {
|
||||
return &NilLogger{}
|
||||
}
|
||||
27
internal/pkg/core/logger/logger.go
Normal file
27
internal/pkg/core/logger/logger.go
Normal file
@@ -0,0 +1,27 @@
|
||||
package logger
|
||||
|
||||
// 表示定义日志记录器的抽象类型接口。
|
||||
type Logger interface {
|
||||
// 追加一条日志记录。
|
||||
// 该方法会将 `data` 以 JSON 序列化后拼接到 `tag` 结尾。
|
||||
//
|
||||
// 入参:
|
||||
// - tag:标签。
|
||||
// - data:数据。
|
||||
Logt(tag string, data ...any)
|
||||
|
||||
// 追加一条日志记录。
|
||||
// 该方法会将 `args` 以 `format` 格式化。
|
||||
//
|
||||
// 入参:
|
||||
// - format:格式化字符串。
|
||||
// - args:格式化参数。
|
||||
Logf(format string, args ...any)
|
||||
|
||||
// 获取所有日志记录。
|
||||
// TODO: 记录时间
|
||||
GetRecords() []string
|
||||
|
||||
// 清空所有日志记录。
|
||||
FlushRecords()
|
||||
}
|
||||
56
internal/pkg/core/logger/logger_test.go
Normal file
56
internal/pkg/core/logger/logger_test.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package logger_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/usual2970/certimate/internal/pkg/core/logger"
|
||||
)
|
||||
|
||||
/*
|
||||
Shell command to run this test:
|
||||
|
||||
go test -v logger_test.go
|
||||
*/
|
||||
func TestLogger(t *testing.T) {
|
||||
t.Run("Logger_Appendt", func(t *testing.T) {
|
||||
logger := logger.NewDefaultLogger()
|
||||
|
||||
logger.Logt("test")
|
||||
logger.Logt("test_nil", nil)
|
||||
logger.Logt("test_int", 1024)
|
||||
logger.Logt("test_string", "certimate")
|
||||
logger.Logt("test_map", map[string]interface{}{"key": "value"})
|
||||
logger.Logt("test_struct", struct{ Name string }{Name: "certimate"})
|
||||
logger.Logt("test_slice", []string{"certimate"})
|
||||
t.Log(logger.GetRecords())
|
||||
if len(logger.GetRecords()) != 7 {
|
||||
t.Errorf("expected 7 records, got %d", len(logger.GetRecords()))
|
||||
}
|
||||
|
||||
logger.FlushRecords()
|
||||
if len(logger.GetRecords()) != 0 {
|
||||
t.Errorf("expected 0 records, got %d", len(logger.GetRecords()))
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("Logger_Appendf", func(t *testing.T) {
|
||||
logger := logger.NewDefaultLogger()
|
||||
|
||||
logger.Logf("test")
|
||||
logger.Logf("test_nil: %v", nil)
|
||||
logger.Logf("test_int: %v", 1024)
|
||||
logger.Logf("test_string: %v", "certimate")
|
||||
logger.Logf("test_map: %v", map[string]interface{}{"key": "value"})
|
||||
logger.Logf("test_struct: %v", struct{ Name string }{Name: "certimate"})
|
||||
logger.Logf("test_slice: %v", []string{"certimate"})
|
||||
t.Log(logger.GetRecords())
|
||||
if len(logger.GetRecords()) != 7 {
|
||||
t.Errorf("expected 7 records, got %d", len(logger.GetRecords()))
|
||||
}
|
||||
|
||||
logger.FlushRecords()
|
||||
if len(logger.GetRecords()) != 0 {
|
||||
t.Errorf("expected 0 records, got %d", len(logger.GetRecords()))
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user