mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-07-30 09:52:04 +08:00
53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
package telemetrystorehook
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"errors"
|
|
"log/slog"
|
|
"time"
|
|
|
|
"github.com/SigNoz/signoz/pkg/factory"
|
|
"github.com/SigNoz/signoz/pkg/telemetrystore"
|
|
)
|
|
|
|
type logging struct {
|
|
logger *slog.Logger
|
|
level slog.Level
|
|
}
|
|
|
|
func NewLoggingFactory() factory.ProviderFactory[telemetrystore.TelemetryStoreHook, telemetrystore.Config] {
|
|
return factory.NewProviderFactory(factory.MustNewName("logging"), NewLogging)
|
|
}
|
|
|
|
func NewLogging(ctx context.Context, providerSettings factory.ProviderSettings, config telemetrystore.Config) (telemetrystore.TelemetryStoreHook, error) {
|
|
return &logging{
|
|
logger: factory.NewScopedProviderSettings(providerSettings, "github.com/SigNoz/signoz/pkg/telemetrystore/telemetrystorehook").Logger(),
|
|
level: slog.LevelDebug,
|
|
}, nil
|
|
}
|
|
|
|
func (logging) BeforeQuery(ctx context.Context, event *telemetrystore.QueryEvent) context.Context {
|
|
return ctx
|
|
}
|
|
|
|
func (hook *logging) AfterQuery(ctx context.Context, event *telemetrystore.QueryEvent) {
|
|
level := hook.level
|
|
args := []any{
|
|
"db.query.text", event.Query,
|
|
"db.query.args", event.QueryArgs,
|
|
"db.duration", time.Since(event.StartTime).String(),
|
|
}
|
|
if event.Err != nil && !errors.Is(event.Err, sql.ErrNoRows) && !errors.Is(event.Err, context.Canceled) {
|
|
level = slog.LevelError
|
|
args = append(args, "db.query.error", event.Err)
|
|
}
|
|
|
|
hook.logger.Log(
|
|
ctx,
|
|
level,
|
|
"::TELEMETRYSTORE-QUERY::",
|
|
args...,
|
|
)
|
|
}
|