Srikanth Chekuri e17f63a50c
chore: error log on query error (#7553)
* chore: error log or query error

* chore: no error on context cancel
2025-04-07 15:15:49 +00:00

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...,
)
}