refactor: 重构trustlog-sdk目录结构到trustlog/go-trustlog
- 将所有trustlog-sdk文件移动到trustlog/go-trustlog/目录 - 更新README中所有import路径从trustlog-sdk改为go-trustlog - 更新cookiecutter配置文件中的项目名称 - 更新根目录.lefthook.yml以引用新位置的配置 - 添加go.sum文件到版本控制 - 删除过时的示例文件 这次重构与trustlog-server保持一致的目录结构, 为未来支持多语言SDK(Python、Java等)预留空间。
This commit is contained in:
194
internal/logger/logger.go
Normal file
194
internal/logger/logger.go
Normal file
@@ -0,0 +1,194 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/ThreeDotsLabs/watermill"
|
||||
"github.com/apache/pulsar-client-go/pulsar/log"
|
||||
|
||||
"go.yandata.net/iod/iod/trustlog-sdk/api/logger"
|
||||
)
|
||||
|
||||
const (
|
||||
// argsPerField 每个字段转换为args时的参数数量(key+value).
|
||||
argsPerField = 2
|
||||
)
|
||||
|
||||
type WatermillLoggerAdapter struct {
|
||||
logger logger.Logger
|
||||
fields watermill.LogFields
|
||||
}
|
||||
|
||||
func (w WatermillLoggerAdapter) Error(msg string, err error, fields watermill.LogFields) {
|
||||
allFields := mergeFields(w.fields, fields)
|
||||
args := allFieldsToArgs(allFields)
|
||||
w.logger.Error(fmt.Sprintf("%s: %v", msg, err), args...)
|
||||
}
|
||||
|
||||
func (w WatermillLoggerAdapter) Info(msg string, fields watermill.LogFields) {
|
||||
allFields := mergeFields(w.fields, fields)
|
||||
args := allFieldsToArgs(allFields)
|
||||
w.logger.Info(msg, args...)
|
||||
}
|
||||
|
||||
func (w WatermillLoggerAdapter) Debug(msg string, fields watermill.LogFields) {
|
||||
allFields := mergeFields(w.fields, fields)
|
||||
args := allFieldsToArgs(allFields)
|
||||
w.logger.Debug(msg, args...)
|
||||
}
|
||||
|
||||
func (w WatermillLoggerAdapter) Trace(msg string, fields watermill.LogFields) {
|
||||
allFields := mergeFields(w.fields, fields)
|
||||
args := allFieldsToArgs(allFields)
|
||||
w.logger.Debug(fmt.Sprintf("[TRACE] %s", msg), args...)
|
||||
}
|
||||
|
||||
func (w WatermillLoggerAdapter) With(fields watermill.LogFields) watermill.LoggerAdapter {
|
||||
newFields := mergeFields(w.fields, fields)
|
||||
return WatermillLoggerAdapter{
|
||||
logger: w.logger,
|
||||
fields: newFields,
|
||||
}
|
||||
}
|
||||
|
||||
//nolint:funcorder // 构造函数放在此处更符合代码组织
|
||||
func NewWatermillLoggerAdapter(logger logger.Logger) *WatermillLoggerAdapter {
|
||||
return &WatermillLoggerAdapter{logger: logger, fields: watermill.LogFields{}}
|
||||
}
|
||||
|
||||
func mergeFields(base, extra watermill.LogFields) watermill.LogFields {
|
||||
merged := make(watermill.LogFields, len(base)+len(extra))
|
||||
for k, v := range base {
|
||||
merged[k] = v
|
||||
}
|
||||
for k, v := range extra {
|
||||
merged[k] = v
|
||||
}
|
||||
return merged
|
||||
}
|
||||
|
||||
func allFieldsToArgs(fields watermill.LogFields) []any {
|
||||
args := make([]any, 0, len(fields)*argsPerField)
|
||||
for k, v := range fields {
|
||||
args = append(args, k, v)
|
||||
}
|
||||
return args
|
||||
}
|
||||
|
||||
// ================= PulsarLoggerAdapter ======================
|
||||
|
||||
type PulsarLoggerAdapter struct {
|
||||
logger logger.Logger
|
||||
fields log.Fields
|
||||
err error
|
||||
}
|
||||
|
||||
func NewPulsarLoggerAdapter(l logger.Logger) *PulsarLoggerAdapter {
|
||||
return &PulsarLoggerAdapter{logger: l, fields: log.Fields{}}
|
||||
}
|
||||
|
||||
func (p PulsarLoggerAdapter) SubLogger(fields log.Fields) log.Logger {
|
||||
return PulsarLoggerAdapter{
|
||||
logger: p.logger,
|
||||
fields: mergePulsarFields(p.fields, fields),
|
||||
err: p.err,
|
||||
}
|
||||
}
|
||||
|
||||
func (p PulsarLoggerAdapter) WithFields(fields log.Fields) log.Entry {
|
||||
return PulsarLoggerAdapter{
|
||||
logger: p.logger,
|
||||
fields: mergePulsarFields(p.fields, fields),
|
||||
err: p.err,
|
||||
}
|
||||
}
|
||||
|
||||
func (p PulsarLoggerAdapter) WithField(name string, value interface{}) log.Entry {
|
||||
newFields := mergePulsarFields(p.fields, log.Fields{name: value})
|
||||
return PulsarLoggerAdapter{
|
||||
logger: p.logger,
|
||||
fields: newFields,
|
||||
err: p.err,
|
||||
}
|
||||
}
|
||||
|
||||
func (p PulsarLoggerAdapter) WithError(err error) log.Entry {
|
||||
return PulsarLoggerAdapter{
|
||||
logger: p.logger,
|
||||
fields: p.fields,
|
||||
err: err,
|
||||
}
|
||||
}
|
||||
|
||||
func (p PulsarLoggerAdapter) Debug(args ...interface{}) {
|
||||
fieldsArgs := fieldsToArgs(p.fields)
|
||||
p.logger.Debug(fmt.Sprint(args...), fieldsArgs...)
|
||||
}
|
||||
|
||||
func (p PulsarLoggerAdapter) Info(args ...interface{}) {
|
||||
fieldsArgs := fieldsToArgs(p.fields)
|
||||
p.logger.Info(fmt.Sprint(args...), fieldsArgs...)
|
||||
}
|
||||
|
||||
func (p PulsarLoggerAdapter) Warn(args ...interface{}) {
|
||||
fieldsArgs := fieldsToArgs(p.fields)
|
||||
p.logger.Warn(fmt.Sprint(args...), fieldsArgs...)
|
||||
}
|
||||
|
||||
func (p PulsarLoggerAdapter) Error(args ...interface{}) {
|
||||
msg := fmt.Sprint(args...)
|
||||
fieldsArgs := fieldsToArgs(p.fields)
|
||||
if p.err != nil {
|
||||
// 将error作为key-value对添加到args中
|
||||
fieldsArgs = append(fieldsArgs, "error", p.err)
|
||||
p.logger.Error(msg, fieldsArgs...)
|
||||
} else {
|
||||
p.logger.Error(msg, fieldsArgs...)
|
||||
}
|
||||
}
|
||||
|
||||
func (p PulsarLoggerAdapter) Debugf(format string, args ...interface{}) {
|
||||
fieldsArgs := fieldsToArgs(p.fields)
|
||||
p.logger.Debug(fmt.Sprintf(format, args...), fieldsArgs...)
|
||||
}
|
||||
|
||||
func (p PulsarLoggerAdapter) Infof(format string, args ...interface{}) {
|
||||
fieldsArgs := fieldsToArgs(p.fields)
|
||||
p.logger.Info(fmt.Sprintf(format, args...), fieldsArgs...)
|
||||
}
|
||||
|
||||
func (p PulsarLoggerAdapter) Warnf(format string, args ...interface{}) {
|
||||
fieldsArgs := fieldsToArgs(p.fields)
|
||||
p.logger.Warn(fmt.Sprintf(format, args...), fieldsArgs...)
|
||||
}
|
||||
|
||||
func (p PulsarLoggerAdapter) Errorf(format string, args ...interface{}) {
|
||||
msg := fmt.Sprintf(format, args...)
|
||||
fieldsArgs := fieldsToArgs(p.fields)
|
||||
if p.err != nil {
|
||||
p.logger.Error(fmt.Sprintf("%s: %v", msg, p.err), fieldsArgs...)
|
||||
} else {
|
||||
p.logger.Error(msg, fieldsArgs...)
|
||||
}
|
||||
}
|
||||
|
||||
// 合并 Pulsar log.Fields.
|
||||
func mergePulsarFields(base, extra log.Fields) log.Fields {
|
||||
merged := make(log.Fields, len(base)+len(extra))
|
||||
for k, v := range base {
|
||||
merged[k] = v
|
||||
}
|
||||
for k, v := range extra {
|
||||
merged[k] = v
|
||||
}
|
||||
return merged
|
||||
}
|
||||
|
||||
// 将 Pulsar log.Fields 转为 args ...any 形式,适配 Adapter.
|
||||
func fieldsToArgs(fields log.Fields) []any {
|
||||
args := make([]any, 0, len(fields)*argsPerField)
|
||||
for k, v := range fields {
|
||||
args = append(args, k, v)
|
||||
}
|
||||
return args
|
||||
}
|
||||
Reference in New Issue
Block a user