3
0

replace profiler with logger, update logger option to bool

This commit is contained in:
Tit Petric 2019-08-06 20:27:35 +00:00
parent c4da01853d
commit cc3c100c62
5 changed files with 45 additions and 47 deletions

View File

@ -41,8 +41,8 @@ MONITOR_INTERVAL=5min
# Database to use
DB_DSN=corteza:corteza@tcp(localhost:3306)/corteza?collation=utf8mb4_general_ci
# DB query profiler (none, stdout, logger)
#DB_PROFILER=none
# Log database queries?
#DB_LOGGER=false
# Logging level we want to use (values: debug, info, warn, error, dpanic, panic, fatal)
#LOG_LEVEL=info

View File

@ -8,6 +8,7 @@ import (
"github.com/getsentry/sentry-go"
"github.com/pkg/errors"
"github.com/titpetric/factory"
"github.com/titpetric/factory/logger"
"go.uber.org/zap"
"github.com/cortezaproject/corteza-server/pkg/cli/options"
@ -93,14 +94,15 @@ func TryToConnect(ctx context.Context, log *zap.Logger, name string, opt options
return nil, errors.Errorf("db connection for %q cancelled", name)
}
switch opt.Profiler {
case "stdout":
db.Profiler = &factory.Database.ProfilerStdout
case "logger":
// Skip 3 levels in call stack to get to the actual function used
db.Profiler = ZapProfiler(log.
WithOptions(zap.AddCallerSkip(3)),
if opt.Logger {
db.SetLogger(
NewZapLogger(
// Skip 3 levels in call stack to get to the actual function used
log.WithOptions(zap.AddCallerSkip(3)),
),
)
} else {
db.SetLogger(logger.Silent{})
}
if err != nil {

32
internal/db/logger.go Normal file
View File

@ -0,0 +1,32 @@
package db
import (
"context"
"github.com/titpetric/factory/logger"
"go.uber.org/zap"
)
type (
zapLogger struct {
logger *zap.Logger
}
)
func NewZapLogger(logger *zap.Logger) *zapLogger {
return &zapLogger{
logger: logger,
}
}
func (z *zapLogger) Log(ctx context.Context, msg string, fields ...logger.Field) {
// @todo when factory.DatabaseProfilerContext gets access to context from
// db functions, try to extract RequestID with middleware.GetReqID()
zapFields := []zap.Field{}
for _, v := range fields {
zapFields = append(zapFields, zap.Any(v.Name(), v.Value()))
}
z.logger.Debug(msg, zapFields...)
}

View File

@ -1,36 +0,0 @@
package db
import (
"time"
"github.com/titpetric/factory"
"go.uber.org/zap"
)
// zapProfiler logs query statistics to zap.logger
type (
zapProfiler struct {
logger *zap.Logger
}
)
func ZapProfiler(logger *zap.Logger) *zapProfiler {
return &zapProfiler{
logger: logger,
}
}
// Post prints the query statistics to stdout
func (p zapProfiler) Post(c *factory.DatabaseProfilerContext) {
// @todo when factory.DatabaseProfilerContext gets access to context from
// db functions, try to extract RequestID with middleware.GetReqID()
p.logger.Debug(
c.Query,
zap.Any("args", c.Args),
zap.Float64("duration", time.Since(c.Time).Seconds()))
}
// Flush stdout (no-op for this profiler)
func (zapProfiler) Flush() {
}

View File

@ -7,7 +7,7 @@ import (
type (
DBOpt struct {
DSN string `env:"DB_DSN"`
Profiler string `env:"DB_PROFILER"`
Logger bool `env:"DB_LOGGER"`
MaxTries int `env:"DB_MAX_TRIES"`
Delay time.Duration `env:"DB_CONN_ERR_DELAY"`
Timeout time.Duration `env:"DB_CONN_TIMEOUT"`
@ -17,7 +17,7 @@ type (
func DB(pfix string) (o *DBOpt) {
o = &DBOpt{
DSN: "corteza:corteza@tcp(db:3306)/corteza?collation=utf8mb4_general_ci",
Profiler: "none",
Logger: false,
MaxTries: 100,
Delay: 5 * time.Second,
Timeout: 1 * time.Minute,