Skip to content

Reuse the Logger instead of reopening the log file on every call when saving to a file - #345

Open
connorshea wants to merge 1 commit into
KnapsackPro:mainfrom
connorshea:claude/fix-logger-reuse
Open

Reuse the Logger instead of reopening the log file on every call when saving to a file#345
connorshea wants to merge 1 commit into
KnapsackPro:mainfrom
connorshea:claude/fix-logger-reuse

Conversation

@connorshea

Copy link
Copy Markdown
Contributor

Description

AI Disclosure: This was generated using Claude Code with Opus 5. It has been reviewed and tested by me.

When KNAPSACK_PRO_LOG_DIR was set, KnapsackPro.logger built a new Logger and reopened the log file on every call. This fixes that behavior to reduce repetitive work and avoid the extra system calls that weren't necessary.

Checks

  • I added the changes to the UNRELEASED section of the CHANGELOG.md, including the needed bump (i.e., patch, minor, major)
  • I followed the architecture outlined below for RSpec in Queue Mode:
    • Pure: lib/knapsack_pro/pure/queue/rspec_pure.rb contains pure functions that are unit tested.
    • Extension: lib/knapsack_pro/extensions/rspec_extension.rb encapsulates calls to RSpec internals and is integration and E2E tested.
    • Runner: lib/knapsack_pro/runners/queue/rspec_runner.rb invokes the pure code and the extension to produce side effects, which are integration and E2E tested.

When KNAPSACK_PRO_LOG_DIR was set, `KnapsackPro.logger` built a new
`Logger` and reopened the log file on *every* call, because the log_dir
branch ran unconditionally instead of only when no logger existed yet.
A CI node leaked a Logger object and a file handle per log call.

The stdout logger was already memoized; the log_dir logger now is too.

Note one consequence worth a second opinion: assigning a custom logger
(`KnapsackPro.logger = Rails.logger`) while KNAPSACK_PRO_LOG_DIR is set
used to be silently overridden on the next `logger` call, and now wins.
That looks like the intended behaviour of a public writer, but it is a
change for anyone relying on the old precedence.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@3v0k4

3v0k4 commented Jul 28, 2026

Copy link
Copy Markdown
Member

Hey @connorshea, thanks for the PR!

Quick question to help us prioritize the work:

Is this creating problems in your projects and requires a quick release?

@connorshea

Copy link
Copy Markdown
Contributor Author

Hey @connorshea, thanks for the PR!

Quick question to help us prioritize the work:

Is this creating problems in your projects and requires a quick release?

No, if any of these PRs take a bit to merge and ship that's fine by me!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants