parent
1e610cd927
commit
3bf07e0b28
@ -0,0 +1,56 @@ |
||||
package gl |
||||
|
||||
import ( |
||||
"context" |
||||
"github.com/go-kratos/kratos/v2/log" |
||||
"go.opentelemetry.io/otel" |
||||
"go.opentelemetry.io/otel/attribute" |
||||
semconv "go.opentelemetry.io/otel/semconv/v1.4.0" |
||||
"go.opentelemetry.io/otel/trace" |
||||
"gorm.io/gorm/logger" |
||||
"strings" |
||||
"time" |
||||
) |
||||
|
||||
type Logger struct { |
||||
*log.Helper |
||||
} |
||||
|
||||
func (l *Logger) LogMode(level logger.LogLevel) logger.Interface { |
||||
return l |
||||
} |
||||
|
||||
func (l *Logger) Info(ctx context.Context, s string, i ...interface{}) { |
||||
l.WithContext(ctx).Info(s, i) |
||||
} |
||||
|
||||
func (l *Logger) Warn(ctx context.Context, s string, i ...interface{}) { |
||||
l.WithContext(ctx).Warn(s, i) |
||||
} |
||||
|
||||
func (l *Logger) Error(ctx context.Context, s string, i ...interface{}) { |
||||
l.WithContext(ctx).Error(s, i) |
||||
} |
||||
|
||||
func (l *Logger) Trace(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error) { |
||||
sql, rowsAffected := fc() |
||||
MysqlTracer(ctx, begin, sql, int(rowsAffected)) |
||||
l.WithContext(ctx).Infof("[%s]db trace sql:%s, rowsAffected:%d, err:%v", begin, sql, rowsAffected, err) |
||||
} |
||||
|
||||
func MysqlTracer(ctx context.Context, begin time.Time, sql string, rowsAffected int) { |
||||
tracer := otel.Tracer("Mysql") |
||||
kind := trace.SpanKindInternal |
||||
strs := strings.Split(sql, " ") |
||||
ctx, span := tracer.Start(ctx, |
||||
strs[0], |
||||
trace.WithSpanKind(kind), |
||||
trace.WithTimestamp(begin), |
||||
) |
||||
var attrs []attribute.KeyValue |
||||
attrs = append(attrs, semconv.DBSystemMySQL) |
||||
attrs = append(attrs, semconv.DBStatementKey.String(sql)) |
||||
attrs = append(attrs, attribute.Int("db.rows_affected", rowsAffected)) |
||||
span.SetAttributes(attrs...) |
||||
span.End(trace.WithTimestamp(time.Now())) |
||||
} |
Loading…
Reference in new issue