diff --git a/.github/workflows/tag_adapters.yml b/.github/workflows/tag_adapters.yml index 1ba9fd3..7a19287 100644 --- a/.github/workflows/tag_adapters.yml +++ b/.github/workflows/tag_adapters.yml @@ -26,17 +26,18 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: - token: "${{ secrets.ACCESS_TOKEN }}" + fetch-depth: 2 ref: "main" + - name: Fetch tags for adapter + run: git fetch --tags origin '+refs/tags/adapters/${{ matrix.adapter }}/*:refs/tags/adapters/${{ matrix.adapter }}/*' + - name: Files modified id: check uses: tj-actions/changed-files@v26.1 with: files: | - ./adapters/${{ matrix.adapter }}/**/*.go - ./adapters/${{ matrix.adapter }}/go.mod - ./adapters/${{ matrix.adapter }}/go.sum + ./adapters/${{ matrix.adapter }}/* - name: Config Git User if: steps.check.outputs.any_changed == 'true' @@ -55,10 +56,6 @@ jobs: if: steps.check.outputs.any_changed == 'true' run: pip install -U commitizen - - name: Pull changes - if: steps.check.outputs.any_changed == 'true' - run: git fetch --tags origin '+refs/tags/adapters/${{ matrix.adapter }}/*:refs/tags/adapters/${{ matrix.adapter }}/*' - - id: cz name: Create bump and changelog if: steps.check.outputs.any_changed == 'true' diff --git a/adapters/slog/options.go b/adapters/slog/options.go index e9355b6..707c5f7 100644 --- a/adapters/slog/options.go +++ b/adapters/slog/options.go @@ -8,9 +8,10 @@ import ( ) type options struct { - level levels.Level - writer io.Writer - logger *slog.Logger + level levels.Level + writer io.Writer + logger *slog.Logger + handler slog.Handler } type Option func(*options) @@ -35,3 +36,10 @@ func WithLogger(logger *slog.Logger) Option { opts.logger = logger } } + +// WithHandler sets the handler for the logger. If a handler is set, the writer and level options will be ignored. +func WithHandler(handler slog.Handler) Option { + return func(opts *options) { + opts.handler = handler + } +} diff --git a/adapters/slog/options_test.go b/adapters/slog/options_test.go index 8996f93..3195a30 100644 --- a/adapters/slog/options_test.go +++ b/adapters/slog/options_test.go @@ -54,3 +54,13 @@ func TestOptionChaining(t *testing.T) { t.Error("Expected writer to be the provided io.Writer, but it's not") } } + +func TestWithHandler(t *testing.T) { + opts := &options{} + + handler := slog.NewTextHandler(os.Stdout, nil) + + WithHandler(handler)(opts) + + assert.NotNil(t, opts.handler) +} diff --git a/adapters/slog/slog.go b/adapters/slog/slog.go index 41a8d4c..eadeb38 100644 --- a/adapters/slog/slog.go +++ b/adapters/slog/slog.go @@ -88,11 +88,15 @@ func getSlogInstance(opts options) *slog.Logger { level := getLevels(opts.level) - handler := slog.NewJSONHandler(opts.writer, &slog.HandlerOptions{ + var handler slog.Handler = slog.NewJSONHandler(opts.writer, &slog.HandlerOptions{ AddSource: false, Level: level, }) + if opts.handler != nil { + handler = opts.handler + } + return slog.New(handler) }