Files
go-trustlog/internal/logger/logger.go
ryan d313449c5c 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等)预留空间。
2025-12-22 13:37:57 +08:00

195 lines
5.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}