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