Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make logger configurable in the embedded ferretdb package #4028

Merged
merged 7 commits into from Feb 22, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
45 changes: 28 additions & 17 deletions ferretdb/ferretdb.go
Expand Up @@ -23,6 +23,7 @@
"errors"
"fmt"
"net/url"
"sync"

"go.uber.org/zap"

Expand All @@ -38,6 +39,9 @@
type Config struct {
Listener ListenerConfig

// Logger to use; if nil, it uses the default global logger.
Logger *zap.Logger

// Handler to use; one of `postgresql` or `sqlite`.
Handler string

Expand Down Expand Up @@ -113,8 +117,13 @@

metrics := connmetrics.NewListenerMetrics()

log := config.Logger
if log == nil {
log = getGlobalLogger()
}

Check warning on line 123 in ferretdb/ferretdb.go

View check run for this annotation

Codecov / codecov/patch

ferretdb/ferretdb.go#L120-L123

Added lines #L120 - L123 were not covered by tests

h, closeBackend, err := registry.NewHandler(config.Handler, &registry.NewHandlerOpts{
Logger: logger,
Logger: log,

Check warning on line 126 in ferretdb/ferretdb.go

View check run for this annotation

Codecov / codecov/patch

ferretdb/ferretdb.go#L126

Added line #L126 was not covered by tests
ConnMetrics: metrics.ConnMetrics,
StateProvider: sp,
TCPHost: config.Listener.TCP,
Expand Down Expand Up @@ -143,7 +152,7 @@
Mode: clientconn.NormalMode,
Metrics: metrics,
Handler: h,
Logger: logger,
Logger: log,

Check warning on line 155 in ferretdb/ferretdb.go

View check run for this annotation

Codecov / codecov/patch

ferretdb/ferretdb.go#L155

Added line #L155 was not covered by tests
})

return &FerretDB{
Expand Down Expand Up @@ -214,21 +223,23 @@
return u.String()
}

// logger is a global logger used by FerretDB.
//
// TODO https://github.com/FerretDB/FerretDB/issues/4014
var logger *zap.Logger
var (
loggerOnce sync.Once
logger *zap.Logger
)

// Initialize the global logger there to avoid creating too many issues for zap users that initialize it in their
// `main()` functions. It is still not a full solution; eventually, we should remove the usage of the global logger.
//
// TODO https://github.com/FerretDB/FerretDB/issues/4014
func init() {
l := zap.ErrorLevel
if version.Get().DebugBuild {
l = zap.DebugLevel
}
// getGlobalLogger retrieves or creates a global logger using
// a loggerOnce to ensure it is created only once.
func getGlobalLogger() *zap.Logger {
fadyat marked this conversation as resolved.
Show resolved Hide resolved
loggerOnce.Do(func() {
level := zap.ErrorLevel
if version.Get().DebugBuild {
level = zap.DebugLevel
}

Check warning on line 238 in ferretdb/ferretdb.go

View check run for this annotation

Codecov / codecov/patch

ferretdb/ferretdb.go#L233-L238

Added lines #L233 - L238 were not covered by tests

logging.Setup(level, "console", "")
noisersup marked this conversation as resolved.
Show resolved Hide resolved
logger = zap.L()

Check warning on line 241 in ferretdb/ferretdb.go

View check run for this annotation

Codecov / codecov/patch

ferretdb/ferretdb.go#L240-L241

Added lines #L240 - L241 were not covered by tests
})

logging.Setup(l, "console", "")
logger = zap.L()
return logger

Check warning on line 244 in ferretdb/ferretdb.go

View check run for this annotation

Codecov / codecov/patch

ferretdb/ferretdb.go#L244

Added line #L244 was not covered by tests
}
2 changes: 2 additions & 0 deletions internal/bson2/slog.go
noisersup marked this conversation as resolved.
Show resolved Hide resolved
Expand Up @@ -41,6 +41,7 @@ func slogValue(v any) slog.Value {
if v == nil {
return slog.StringValue("RawDocument(nil)")
}

return slog.StringValue("RawDocument(" + strconv.Itoa(len(v)) + " bytes)")

case *Array:
Expand All @@ -56,6 +57,7 @@ func slogValue(v any) slog.Value {
if v == nil {
return slog.StringValue("RawArray(nil)")
}

return slog.StringValue("RawArray(" + strconv.Itoa(len(v)) + " bytes)")

default:
Expand Down