Skip to content

Commit

Permalink
feat!: introduce logger choice via slog
Browse files Browse the repository at this point in the history
Historically brokerapi has required use of the
[`lager`](https://github.com/cloudfoundry/lager) logger. In Go 1.21,
structured logging was introduced into the Go standard library via the
[`log/slog`](https://pkg.go.dev/log/slog) package, and `slog`
[compatability was added](cloudfoundry/lager@4bf4955)
to `lager`.

`brokerapi` has been modified to require a `slog` logger to be passed
rather than a `lager` logger. This allows users a choice of logger.
Users who still want to use lager can easily do that using the
lager/slog compatability:
```go
logger := lager.NewLogger(name)
brokerAPI := brokerapi.New(serviceBroker, slog.New(lager.NewHandler(logger)), credentials)
```

And users who want to use `slog` or an `slog`-compatible logger can do
that instead.

A key advantage is that `lager` is no longer a dependency of this
package, which simplifies package management for apps that use brokerapi
and other libraries which use `lager`.
  • Loading branch information
blgm committed Jan 29, 2024
1 parent 4b27d1c commit 2d4b1ad
Show file tree
Hide file tree
Showing 27 changed files with 358 additions and 301 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/run-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
version: [ 'stable', 'oldstable', '1.20' ]
version: [ 'stable', 'oldstable', '1.21' ]
name: Go ${{ matrix.version }}
outputs:
pr_number: ${{ github.event.number }}
Expand Down
10 changes: 5 additions & 5 deletions api.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
package brokerapi

import (
"log/slog"
"net/http"

"code.cloudfoundry.org/lager/v3"
"github.com/go-chi/chi/v5"
"github.com/pivotal-cf/brokerapi/v10/handlers"
)
Expand All @@ -28,19 +28,19 @@ type BrokerCredentials struct {
Password string
}

func New(serviceBroker ServiceBroker, logger lager.Logger, brokerCredentials BrokerCredentials) http.Handler {
func New(serviceBroker ServiceBroker, logger *slog.Logger, brokerCredentials BrokerCredentials) http.Handler {
return NewWithOptions(serviceBroker, logger, WithBrokerCredentials(brokerCredentials))
}

func NewWithCustomAuth(serviceBroker ServiceBroker, logger lager.Logger, authMiddleware middlewareFunc) http.Handler {
func NewWithCustomAuth(serviceBroker ServiceBroker, logger *slog.Logger, authMiddleware middlewareFunc) http.Handler {
return NewWithOptions(serviceBroker, logger, WithCustomAuth(authMiddleware))
}

func AttachRoutes(router chi.Router, serviceBroker ServiceBroker, logger lager.Logger) {
func AttachRoutes(router chi.Router, serviceBroker ServiceBroker, logger *slog.Logger) {
attachRoutes(router, serviceBroker, logger)
}

func attachRoutes(router chi.Router, serviceBroker ServiceBroker, logger lager.Logger) {
func attachRoutes(router chi.Router, serviceBroker ServiceBroker, logger *slog.Logger) {
apiHandler := handlers.NewApiHandler(serviceBroker, logger)
router.Get("/v2/catalog", apiHandler.Catalog)

Expand Down
10 changes: 5 additions & 5 deletions api_options.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
package brokerapi

import (
"log/slog"
"net/http"

"code.cloudfoundry.org/lager/v3"
"github.com/go-chi/chi/v5"
"github.com/pivotal-cf/brokerapi/v10/auth"
"github.com/pivotal-cf/brokerapi/v10/domain"
Expand All @@ -27,7 +27,7 @@ import (

type middlewareFunc func(http.Handler) http.Handler

func NewWithOptions(serviceBroker domain.ServiceBroker, logger lager.Logger, opts ...Option) http.Handler {
func NewWithOptions(serviceBroker domain.ServiceBroker, logger *slog.Logger, opts ...Option) http.Handler {
cfg := newDefaultConfig(logger)
WithOptions(append(opts, withDefaultMiddleware())...)(cfg)
attachRoutes(cfg.router, serviceBroker, logger)
Expand Down Expand Up @@ -70,7 +70,7 @@ func WithEncodedPath() Option {
func withDefaultMiddleware() Option {
return func(c *config) {
if !c.customRouter {
c.router.Use(middlewares.APIVersionMiddleware{LoggerFactory: c.logger}.ValidateAPIVersionHdr)
c.router.Use(middlewares.APIVersionMiddleware{Logger: c.logger}.ValidateAPIVersionHdr)
c.router.Use(middlewares.AddCorrelationIDToContext)
c.router.Use(middlewares.AddOriginatingIdentityToContext)
c.router.Use(middlewares.AddInfoLocationToContext)
Expand All @@ -87,7 +87,7 @@ func WithOptions(opts ...Option) Option {
}
}

func newDefaultConfig(logger lager.Logger) *config {
func newDefaultConfig(logger *slog.Logger) *config {
return &config{
router: chi.NewRouter(),
customRouter: false,
Expand All @@ -98,5 +98,5 @@ func newDefaultConfig(logger lager.Logger) *config {
type config struct {
router chi.Router
customRouter bool
logger lager.Logger
logger *slog.Logger
}
Loading

0 comments on commit 2d4b1ad

Please sign in to comment.