fix(log): emit the buffered lines Flush() dropped - #3464

Draft
Dave Shoup (shouples) wants to merge 1 commit into
djs/migrate-mocker-to-mockgenfrom
djs/fix-log-flush
Draft

fix(log): emit the buffered lines Flush() dropped#3464
Dave Shoup (shouples) wants to merge 1 commit into
djs/migrate-mocker-to-mockgenfrom
djs/fix-log-flush

Conversation

@shouples

Copy link
Copy Markdown
Contributor

Release Notes

Bug Fixes

  • Fixed verbose logging (-v) dropping buffered log lines it should have emitted, and emitting the low-priority ones instead.

Checklist

  • I have successfully built and used a custom CLI binary, without linter issues from this PR.
  • I have clearly specified in the What section below whether this PR applies to Confluent Cloud, Confluent Platform, or both.
  • I have verified this PR in Confluent Cloud pre-prod or production environment, if applicable.
  • I have verified this PR in Confluent Platform on-premises environment, if applicable.
  • I have attached manual CLI verification results or screenshots in the Test & Review section below.
  • I have added appropriate CLI integration or unit tests for any new or updated commands and functionality.
  • I confirm that this PR introduces no breaking changes or backward compatibility issues.
  • I have indicated the potential customer impact if something goes wrong in the Blast Radius section below.
  • I have put checkmarks below confirming that the feature associated with this PR is enabled in:
    • Confluent Cloud prod
    • Confluent Cloud stag
    • Confluent Platform
    • Check this box if the feature is enabled for certain organizations only

Applies to both Cloud and Platform (shared logging). Feature-flag items are N/A - this is a bug fix, not a gated feature.

What

The CLI buffers log lines and flushes them later (for example, to attach context to an error). The flush filter that decides which buffered lines to emit was inverted, so it dropped exactly the lines it should have kept - the more important, less verbose ones - and emitted the rest.

pkg/log/logger.go's Flush() had if lm.level < l.Level { continue }. Higher level values mean more verbose, so a buffered line should be emitted when its level is at or below the current threshold (lm.level <= l.Level), not skipped when it is below. The one-character fix flips the comparison to >, and a regression test pins the behavior so it cannot silently invert again.

Same command at -vvv (verbosity = DEBUG), with four lines buffered before verbosity was parsed:

# before (buggy `<`): drops the WARN and INFO lines the user should see
[DEBUG] debug: low-level detail
# after (fixed `>`): everything at or below the requested level is emitted
[WARN] warn: rare but handled
[INFO] info: steady-state
[DEBUG] debug: low-level detail

(TRACE is correctly withheld in both - it is more verbose than the requested DEBUG.)

Applies to: both Confluent Cloud and Confluent Platform (shared logging code).

Blast Radius

Very small, and confined to diagnostic logging. The logger writes only to stderr, and Flush() runs once at startup purely for its logging side effect - it returns nothing and touches no command result, exit code, or stdout, so machine-readable output (-o json / -o yaml) is unaffected. If the filter were wrong, the effect is limited to which buffered lines land on stderr, and only in the under-emitting direction: the per-level emit methods re-gate each line, so a wrong filter still cannot surface a line more verbose than the active level (credential-bearing UNSAFE_TRACE output stays gated behind --unsafe-trace regardless). No customer-facing command would break.

References

  • Stacked on the migrate-mocker-to-mockgen base; part of a small logging-fix stack.

Test & Review

  • Added a regression test in pkg/log/logger_test.go asserting Flush() emits buffered lines at or below the threshold and drops the more-verbose ones.
  • A/B verified by hand: at -vvvv, the same command emitted 0 buffered [DEBUG] lines before the fix and 4 after.
  • go test ./pkg/log/... passes.

@confluent-cla-assistant

Copy link
Copy Markdown

🎉 All Contributor License Agreements have been signed. Ready to merge.
Please push an empty commit if you would like to re-run the checks to verify CLA status for all contributors.

@shouplesDave Shoup (shouples) changed the title fix(log): emit the buffered lines Flush() droppedfix(log): emit the buffered lines Flush() droppedAug 21, 2026
Flush replays buffered messages once verbosity is raised (a message logged
before -v is parsed, say). The filter was `lm.level < l.Level`, but a higher
Level value is more verbose, so it skipped exactly the messages now within
the threshold and emitted the rest. Corrected to `>`, with a regression
test that logs at DEBUG, raises verbosity, and asserts the message appears.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@sonarqube-confluent

Copy link
Copy Markdown

Sign up for freeto 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.

1 participant

@shouples
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(log): emit the buffered lines Flush() dropped - #3464

Draft
Dave Shoup (shouples) wants to merge 1 commit into
djs/migrate-mocker-to-mockgenfrom
djs/fix-log-flush
Draft

fix(log): emit the buffered lines Flush() dropped#3464
Dave Shoup (shouples) wants to merge 1 commit into
djs/migrate-mocker-to-mockgenfrom
djs/fix-log-flush

Conversation

@shouples

Copy link
Copy Markdown
Contributor

Release Notes

Bug Fixes

  • Fixed verbose logging (-v) dropping buffered log lines it should have emitted, and emitting the low-priority ones instead.

Checklist

  • I have successfully built and used a custom CLI binary, without linter issues from this PR.
  • I have clearly specified in the What section below whether this PR applies to Confluent Cloud, Confluent Platform, or both.
  • I have verified this PR in Confluent Cloud pre-prod or production environment, if applicable.
  • I have verified this PR in Confluent Platform on-premises environment, if applicable.
  • I have attached manual CLI verification results or screenshots in the Test & Review section below.
  • I have added appropriate CLI integration or unit tests for any new or updated commands and functionality.
  • I confirm that this PR introduces no breaking changes or backward compatibility issues.
  • I have indicated the potential customer impact if something goes wrong in the Blast Radius section below.
  • I have put checkmarks below confirming that the feature associated with this PR is enabled in:
    • Confluent Cloud prod
    • Confluent Cloud stag
    • Confluent Platform
    • Check this box if the feature is enabled for certain organizations only

Applies to both Cloud and Platform (shared logging). Feature-flag items are N/A - this is a bug fix, not a gated feature.

What

The CLI buffers log lines and flushes them later (for example, to attach context to an error). The flush filter that decides which buffered lines to emit was inverted, so it dropped exactly the lines it should have kept - the more important, less verbose ones - and emitted the rest.

pkg/log/logger.go's Flush() had if lm.level < l.Level { continue }. Higher level values mean more verbose, so a buffered line should be emitted when its level is at or below the current threshold (lm.level <= l.Level), not skipped when it is below. The one-character fix flips the comparison to >, and a regression test pins the behavior so it cannot silently invert again.

Same command at -vvv (verbosity = DEBUG), with four lines buffered before verbosity was parsed:

# before (buggy `<`): drops the WARN and INFO lines the user should see
[DEBUG] debug: low-level detail
# after (fixed `>`): everything at or below the requested level is emitted
[WARN] warn: rare but handled
[INFO] info: steady-state
[DEBUG] debug: low-level detail

(TRACE is correctly withheld in both - it is more verbose than the requested DEBUG.)

Applies to: both Confluent Cloud and Confluent Platform (shared logging code).

Blast Radius

Very small, and confined to diagnostic logging. The logger writes only to stderr, and Flush() runs once at startup purely for its logging side effect - it returns nothing and touches no command result, exit code, or stdout, so machine-readable output (-o json / -o yaml) is unaffected. If the filter were wrong, the effect is limited to which buffered lines land on stderr, and only in the under-emitting direction: the per-level emit methods re-gate each line, so a wrong filter still cannot surface a line more verbose than the active level (credential-bearing UNSAFE_TRACE output stays gated behind --unsafe-trace regardless). No customer-facing command would break.

References

  • Stacked on the migrate-mocker-to-mockgen base; part of a small logging-fix stack.

Test & Review

  • Added a regression test in pkg/log/logger_test.go asserting Flush() emits buffered lines at or below the threshold and drops the more-verbose ones.
  • A/B verified by hand: at -vvvv, the same command emitted 0 buffered [DEBUG] lines before the fix and 4 after.
  • go test ./pkg/log/... passes.

@confluent-cla-assistant

Copy link
Copy Markdown

🎉 All Contributor License Agreements have been signed. Ready to merge.
Please push an empty commit if you would like to re-run the checks to verify CLA status for all contributors.

@shouplesDave Shoup (shouples) changed the title fix(log): emit the buffered lines Flush() droppedfix(log): emit the buffered lines Flush() droppedAug 21, 2026
Flush replays buffered messages once verbosity is raised (a message logged
before -v is parsed, say). The filter was `lm.level < l.Level`, but a higher
Level value is more verbose, so it skipped exactly the messages now within
the threshold and emitted the rest. Corrected to `>`, with a regression
test that logs at DEBUG, raises verbosity, and asserts the message appears.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@sonarqube-confluent

Copy link
Copy Markdown

Sign up for freeto 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.

1 participant

@shouples
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(log): emit the buffered lines Flush() dropped - #3464

Draft
Dave Shoup (shouples) wants to merge 1 commit into
djs/migrate-mocker-to-mockgenfrom
djs/fix-log-flush
Draft

fix(log): emit the buffered lines Flush() dropped#3464
Dave Shoup (shouples) wants to merge 1 commit into
djs/migrate-mocker-to-mockgenfrom
djs/fix-log-flush

Conversation

@shouples

Copy link
Copy Markdown
Contributor

Release Notes

Bug Fixes

  • Fixed verbose logging (-v) dropping buffered log lines it should have emitted, and emitting the low-priority ones instead.

Checklist

  • I have successfully built and used a custom CLI binary, without linter issues from this PR.
  • I have clearly specified in the What section below whether this PR applies to Confluent Cloud, Confluent Platform, or both.
  • I have verified this PR in Confluent Cloud pre-prod or production environment, if applicable.
  • I have verified this PR in Confluent Platform on-premises environment, if applicable.
  • I have attached manual CLI verification results or screenshots in the Test & Review section below.
  • I have added appropriate CLI integration or unit tests for any new or updated commands and functionality.
  • I confirm that this PR introduces no breaking changes or backward compatibility issues.
  • I have indicated the potential customer impact if something goes wrong in the Blast Radius section below.
  • I have put checkmarks below confirming that the feature associated with this PR is enabled in:
    • Confluent Cloud prod
    • Confluent Cloud stag
    • Confluent Platform
    • Check this box if the feature is enabled for certain organizations only

Applies to both Cloud and Platform (shared logging). Feature-flag items are N/A - this is a bug fix, not a gated feature.

What

The CLI buffers log lines and flushes them later (for example, to attach context to an error). The flush filter that decides which buffered lines to emit was inverted, so it dropped exactly the lines it should have kept - the more important, less verbose ones - and emitted the rest.

pkg/log/logger.go's Flush() had if lm.level < l.Level { continue }. Higher level values mean more verbose, so a buffered line should be emitted when its level is at or below the current threshold (lm.level <= l.Level), not skipped when it is below. The one-character fix flips the comparison to >, and a regression test pins the behavior so it cannot silently invert again.

Same command at -vvv (verbosity = DEBUG), with four lines buffered before verbosity was parsed:

# before (buggy `<`): drops the WARN and INFO lines the user should see
[DEBUG] debug: low-level detail
# after (fixed `>`): everything at or below the requested level is emitted
[WARN] warn: rare but handled
[INFO] info: steady-state
[DEBUG] debug: low-level detail

(TRACE is correctly withheld in both - it is more verbose than the requested DEBUG.)

Applies to: both Confluent Cloud and Confluent Platform (shared logging code).

Blast Radius

Very small, and confined to diagnostic logging. The logger writes only to stderr, and Flush() runs once at startup purely for its logging side effect - it returns nothing and touches no command result, exit code, or stdout, so machine-readable output (-o json / -o yaml) is unaffected. If the filter were wrong, the effect is limited to which buffered lines land on stderr, and only in the under-emitting direction: the per-level emit methods re-gate each line, so a wrong filter still cannot surface a line more verbose than the active level (credential-bearing UNSAFE_TRACE output stays gated behind --unsafe-trace regardless). No customer-facing command would break.

References

  • Stacked on the migrate-mocker-to-mockgen base; part of a small logging-fix stack.

Test & Review

  • Added a regression test in pkg/log/logger_test.go asserting Flush() emits buffered lines at or below the threshold and drops the more-verbose ones.
  • A/B verified by hand: at -vvvv, the same command emitted 0 buffered [DEBUG] lines before the fix and 4 after.
  • go test ./pkg/log/... passes.

@confluent-cla-assistant

Copy link
Copy Markdown

🎉 All Contributor License Agreements have been signed. Ready to merge.
Please push an empty commit if you would like to re-run the checks to verify CLA status for all contributors.

@shouplesDave Shoup (shouples) changed the title fix(log): emit the buffered lines Flush() droppedfix(log): emit the buffered lines Flush() droppedAug 21, 2026
Flush replays buffered messages once verbosity is raised (a message logged
before -v is parsed, say). The filter was `lm.level < l.Level`, but a higher
Level value is more verbose, so it skipped exactly the messages now within
the threshold and emitted the rest. Corrected to `>`, with a regression
test that logs at DEBUG, raises verbosity, and asserts the message appears.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@sonarqube-confluent

Copy link
Copy Markdown

Sign up for freeto 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.

1 participant

@shouples
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(log): emit the buffered lines Flush() dropped - #3464

Draft
Dave Shoup (shouples) wants to merge 1 commit into
djs/migrate-mocker-to-mockgenfrom
djs/fix-log-flush
Draft

fix(log): emit the buffered lines Flush() dropped#3464
Dave Shoup (shouples) wants to merge 1 commit into
djs/migrate-mocker-to-mockgenfrom
djs/fix-log-flush

Conversation

@shouples

Copy link
Copy Markdown
Contributor

Release Notes

Bug Fixes

  • Fixed verbose logging (-v) dropping buffered log lines it should have emitted, and emitting the low-priority ones instead.

Checklist

  • I have successfully built and used a custom CLI binary, without linter issues from this PR.
  • I have clearly specified in the What section below whether this PR applies to Confluent Cloud, Confluent Platform, or both.
  • I have verified this PR in Confluent Cloud pre-prod or production environment, if applicable.
  • I have verified this PR in Confluent Platform on-premises environment, if applicable.
  • I have attached manual CLI verification results or screenshots in the Test & Review section below.
  • I have added appropriate CLI integration or unit tests for any new or updated commands and functionality.
  • I confirm that this PR introduces no breaking changes or backward compatibility issues.
  • I have indicated the potential customer impact if something goes wrong in the Blast Radius section below.
  • I have put checkmarks below confirming that the feature associated with this PR is enabled in:
    • Confluent Cloud prod
    • Confluent Cloud stag
    • Confluent Platform
    • Check this box if the feature is enabled for certain organizations only

Applies to both Cloud and Platform (shared logging). Feature-flag items are N/A - this is a bug fix, not a gated feature.

What

The CLI buffers log lines and flushes them later (for example, to attach context to an error). The flush filter that decides which buffered lines to emit was inverted, so it dropped exactly the lines it should have kept - the more important, less verbose ones - and emitted the rest.

pkg/log/logger.go's Flush() had if lm.level < l.Level { continue }. Higher level values mean more verbose, so a buffered line should be emitted when its level is at or below the current threshold (lm.level <= l.Level), not skipped when it is below. The one-character fix flips the comparison to >, and a regression test pins the behavior so it cannot silently invert again.

Same command at -vvv (verbosity = DEBUG), with four lines buffered before verbosity was parsed:

# before (buggy `<`): drops the WARN and INFO lines the user should see
[DEBUG] debug: low-level detail
# after (fixed `>`): everything at or below the requested level is emitted
[WARN] warn: rare but handled
[INFO] info: steady-state
[DEBUG] debug: low-level detail

(TRACE is correctly withheld in both - it is more verbose than the requested DEBUG.)

Applies to: both Confluent Cloud and Confluent Platform (shared logging code).

Blast Radius

Very small, and confined to diagnostic logging. The logger writes only to stderr, and Flush() runs once at startup purely for its logging side effect - it returns nothing and touches no command result, exit code, or stdout, so machine-readable output (-o json / -o yaml) is unaffected. If the filter were wrong, the effect is limited to which buffered lines land on stderr, and only in the under-emitting direction: the per-level emit methods re-gate each line, so a wrong filter still cannot surface a line more verbose than the active level (credential-bearing UNSAFE_TRACE output stays gated behind --unsafe-trace regardless). No customer-facing command would break.

References

  • Stacked on the migrate-mocker-to-mockgen base; part of a small logging-fix stack.

Test & Review

  • Added a regression test in pkg/log/logger_test.go asserting Flush() emits buffered lines at or below the threshold and drops the more-verbose ones.
  • A/B verified by hand: at -vvvv, the same command emitted 0 buffered [DEBUG] lines before the fix and 4 after.
  • go test ./pkg/log/... passes.

@confluent-cla-assistant

Copy link
Copy Markdown

🎉 All Contributor License Agreements have been signed. Ready to merge.
Please push an empty commit if you would like to re-run the checks to verify CLA status for all contributors.

@shouplesDave Shoup (shouples) changed the title fix(log): emit the buffered lines Flush() droppedfix(log): emit the buffered lines Flush() droppedAug 21, 2026
Flush replays buffered messages once verbosity is raised (a message logged
before -v is parsed, say). The filter was `lm.level < l.Level`, but a higher
Level value is more verbose, so it skipped exactly the messages now within
the threshold and emitted the rest. Corrected to `>`, with a regression
test that logs at DEBUG, raises verbosity, and asserts the message appears.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@sonarqube-confluent

Copy link
Copy Markdown

Sign up for freeto 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.

1 participant

@shouples
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(log): emit the buffered lines Flush() dropped - #3464

Draft
Dave Shoup (shouples) wants to merge 1 commit into
djs/migrate-mocker-to-mockgenfrom
djs/fix-log-flush
Draft

fix(log): emit the buffered lines Flush() dropped#3464
Dave Shoup (shouples) wants to merge 1 commit into
djs/migrate-mocker-to-mockgenfrom
djs/fix-log-flush

Conversation

@shouples

Copy link
Copy Markdown
Contributor

Release Notes

Bug Fixes

  • Fixed verbose logging (-v) dropping buffered log lines it should have emitted, and emitting the low-priority ones instead.

Checklist

  • I have successfully built and used a custom CLI binary, without linter issues from this PR.
  • I have clearly specified in the What section below whether this PR applies to Confluent Cloud, Confluent Platform, or both.
  • I have verified this PR in Confluent Cloud pre-prod or production environment, if applicable.
  • I have verified this PR in Confluent Platform on-premises environment, if applicable.
  • I have attached manual CLI verification results or screenshots in the Test & Review section below.
  • I have added appropriate CLI integration or unit tests for any new or updated commands and functionality.
  • I confirm that this PR introduces no breaking changes or backward compatibility issues.
  • I have indicated the potential customer impact if something goes wrong in the Blast Radius section below.
  • I have put checkmarks below confirming that the feature associated with this PR is enabled in:
    • Confluent Cloud prod
    • Confluent Cloud stag
    • Confluent Platform
    • Check this box if the feature is enabled for certain organizations only

Applies to both Cloud and Platform (shared logging). Feature-flag items are N/A - this is a bug fix, not a gated feature.

What

The CLI buffers log lines and flushes them later (for example, to attach context to an error). The flush filter that decides which buffered lines to emit was inverted, so it dropped exactly the lines it should have kept - the more important, less verbose ones - and emitted the rest.

pkg/log/logger.go's Flush() had if lm.level < l.Level { continue }. Higher level values mean more verbose, so a buffered line should be emitted when its level is at or below the current threshold (lm.level <= l.Level), not skipped when it is below. The one-character fix flips the comparison to >, and a regression test pins the behavior so it cannot silently invert again.

Same command at -vvv (verbosity = DEBUG), with four lines buffered before verbosity was parsed:

# before (buggy `<`): drops the WARN and INFO lines the user should see
[DEBUG] debug: low-level detail
# after (fixed `>`): everything at or below the requested level is emitted
[WARN] warn: rare but handled
[INFO] info: steady-state
[DEBUG] debug: low-level detail

(TRACE is correctly withheld in both - it is more verbose than the requested DEBUG.)

Applies to: both Confluent Cloud and Confluent Platform (shared logging code).

Blast Radius

Very small, and confined to diagnostic logging. The logger writes only to stderr, and Flush() runs once at startup purely for its logging side effect - it returns nothing and touches no command result, exit code, or stdout, so machine-readable output (-o json / -o yaml) is unaffected. If the filter were wrong, the effect is limited to which buffered lines land on stderr, and only in the under-emitting direction: the per-level emit methods re-gate each line, so a wrong filter still cannot surface a line more verbose than the active level (credential-bearing UNSAFE_TRACE output stays gated behind --unsafe-trace regardless). No customer-facing command would break.

References

  • Stacked on the migrate-mocker-to-mockgen base; part of a small logging-fix stack.

Test & Review

  • Added a regression test in pkg/log/logger_test.go asserting Flush() emits buffered lines at or below the threshold and drops the more-verbose ones.
  • A/B verified by hand: at -vvvv, the same command emitted 0 buffered [DEBUG] lines before the fix and 4 after.
  • go test ./pkg/log/... passes.

@confluent-cla-assistant

Copy link
Copy Markdown

🎉 All Contributor License Agreements have been signed. Ready to merge.
Please push an empty commit if you would like to re-run the checks to verify CLA status for all contributors.

@shouplesDave Shoup (shouples) changed the title fix(log): emit the buffered lines Flush() droppedfix(log): emit the buffered lines Flush() droppedAug 21, 2026
Flush replays buffered messages once verbosity is raised (a message logged
before -v is parsed, say). The filter was `lm.level < l.Level`, but a higher
Level value is more verbose, so it skipped exactly the messages now within
the threshold and emitted the rest. Corrected to `>`, with a regression
test that logs at DEBUG, raises verbosity, and asserts the message appears.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@sonarqube-confluent

Copy link
Copy Markdown

Sign up for freeto 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.

1 participant

@shouples
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(log): emit the buffered lines Flush() dropped - #3464

Draft
Dave Shoup (shouples) wants to merge 1 commit into
djs/migrate-mocker-to-mockgenfrom
djs/fix-log-flush
Draft

fix(log): emit the buffered lines Flush() dropped#3464
Dave Shoup (shouples) wants to merge 1 commit into
djs/migrate-mocker-to-mockgenfrom
djs/fix-log-flush

Conversation

@shouples

Copy link
Copy Markdown
Contributor

Release Notes

Bug Fixes

  • Fixed verbose logging (-v) dropping buffered log lines it should have emitted, and emitting the low-priority ones instead.

Checklist

  • I have successfully built and used a custom CLI binary, without linter issues from this PR.
  • I have clearly specified in the What section below whether this PR applies to Confluent Cloud, Confluent Platform, or both.
  • I have verified this PR in Confluent Cloud pre-prod or production environment, if applicable.
  • I have verified this PR in Confluent Platform on-premises environment, if applicable.
  • I have attached manual CLI verification results or screenshots in the Test & Review section below.
  • I have added appropriate CLI integration or unit tests for any new or updated commands and functionality.
  • I confirm that this PR introduces no breaking changes or backward compatibility issues.
  • I have indicated the potential customer impact if something goes wrong in the Blast Radius section below.
  • I have put checkmarks below confirming that the feature associated with this PR is enabled in:
    • Confluent Cloud prod
    • Confluent Cloud stag
    • Confluent Platform
    • Check this box if the feature is enabled for certain organizations only

Applies to both Cloud and Platform (shared logging). Feature-flag items are N/A - this is a bug fix, not a gated feature.

What

The CLI buffers log lines and flushes them later (for example, to attach context to an error). The flush filter that decides which buffered lines to emit was inverted, so it dropped exactly the lines it should have kept - the more important, less verbose ones - and emitted the rest.

pkg/log/logger.go's Flush() had if lm.level < l.Level { continue }. Higher level values mean more verbose, so a buffered line should be emitted when its level is at or below the current threshold (lm.level <= l.Level), not skipped when it is below. The one-character fix flips the comparison to >, and a regression test pins the behavior so it cannot silently invert again.

Same command at -vvv (verbosity = DEBUG), with four lines buffered before verbosity was parsed:

# before (buggy `<`): drops the WARN and INFO lines the user should see
[DEBUG] debug: low-level detail
# after (fixed `>`): everything at or below the requested level is emitted
[WARN] warn: rare but handled
[INFO] info: steady-state
[DEBUG] debug: low-level detail

(TRACE is correctly withheld in both - it is more verbose than the requested DEBUG.)

Applies to: both Confluent Cloud and Confluent Platform (shared logging code).

Blast Radius

Very small, and confined to diagnostic logging. The logger writes only to stderr, and Flush() runs once at startup purely for its logging side effect - it returns nothing and touches no command result, exit code, or stdout, so machine-readable output (-o json / -o yaml) is unaffected. If the filter were wrong, the effect is limited to which buffered lines land on stderr, and only in the under-emitting direction: the per-level emit methods re-gate each line, so a wrong filter still cannot surface a line more verbose than the active level (credential-bearing UNSAFE_TRACE output stays gated behind --unsafe-trace regardless). No customer-facing command would break.

References

  • Stacked on the migrate-mocker-to-mockgen base; part of a small logging-fix stack.

Test & Review

  • Added a regression test in pkg/log/logger_test.go asserting Flush() emits buffered lines at or below the threshold and drops the more-verbose ones.
  • A/B verified by hand: at -vvvv, the same command emitted 0 buffered [DEBUG] lines before the fix and 4 after.
  • go test ./pkg/log/... passes.

@confluent-cla-assistant

Copy link
Copy Markdown

🎉 All Contributor License Agreements have been signed. Ready to merge.
Please push an empty commit if you would like to re-run the checks to verify CLA status for all contributors.

@shouplesDave Shoup (shouples) changed the title fix(log): emit the buffered lines Flush() droppedfix(log): emit the buffered lines Flush() droppedAug 21, 2026
Flush replays buffered messages once verbosity is raised (a message logged
before -v is parsed, say). The filter was `lm.level < l.Level`, but a higher
Level value is more verbose, so it skipped exactly the messages now within
the threshold and emitted the rest. Corrected to `>`, with a regression
test that logs at DEBUG, raises verbosity, and asserts the message appears.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@sonarqube-confluent

Copy link
Copy Markdown

Sign up for freeto 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.

1 participant

@shouples
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(log): emit the buffered lines Flush() dropped - #3464

Draft
Dave Shoup (shouples) wants to merge 1 commit into
djs/migrate-mocker-to-mockgenfrom
djs/fix-log-flush
Draft

fix(log): emit the buffered lines Flush() dropped#3464
Dave Shoup (shouples) wants to merge 1 commit into
djs/migrate-mocker-to-mockgenfrom
djs/fix-log-flush

Conversation

@shouples

Copy link
Copy Markdown
Contributor

Release Notes

Bug Fixes

  • Fixed verbose logging (-v) dropping buffered log lines it should have emitted, and emitting the low-priority ones instead.

Checklist

  • I have successfully built and used a custom CLI binary, without linter issues from this PR.
  • I have clearly specified in the What section below whether this PR applies to Confluent Cloud, Confluent Platform, or both.
  • I have verified this PR in Confluent Cloud pre-prod or production environment, if applicable.
  • I have verified this PR in Confluent Platform on-premises environment, if applicable.
  • I have attached manual CLI verification results or screenshots in the Test & Review section below.
  • I have added appropriate CLI integration or unit tests for any new or updated commands and functionality.
  • I confirm that this PR introduces no breaking changes or backward compatibility issues.
  • I have indicated the potential customer impact if something goes wrong in the Blast Radius section below.
  • I have put checkmarks below confirming that the feature associated with this PR is enabled in:
    • Confluent Cloud prod
    • Confluent Cloud stag
    • Confluent Platform
    • Check this box if the feature is enabled for certain organizations only

Applies to both Cloud and Platform (shared logging). Feature-flag items are N/A - this is a bug fix, not a gated feature.

What

The CLI buffers log lines and flushes them later (for example, to attach context to an error). The flush filter that decides which buffered lines to emit was inverted, so it dropped exactly the lines it should have kept - the more important, less verbose ones - and emitted the rest.

pkg/log/logger.go's Flush() had if lm.level < l.Level { continue }. Higher level values mean more verbose, so a buffered line should be emitted when its level is at or below the current threshold (lm.level <= l.Level), not skipped when it is below. The one-character fix flips the comparison to >, and a regression test pins the behavior so it cannot silently invert again.

Same command at -vvv (verbosity = DEBUG), with four lines buffered before verbosity was parsed:

# before (buggy `<`): drops the WARN and INFO lines the user should see
[DEBUG] debug: low-level detail
# after (fixed `>`): everything at or below the requested level is emitted
[WARN] warn: rare but handled
[INFO] info: steady-state
[DEBUG] debug: low-level detail

(TRACE is correctly withheld in both - it is more verbose than the requested DEBUG.)

Applies to: both Confluent Cloud and Confluent Platform (shared logging code).

Blast Radius

Very small, and confined to diagnostic logging. The logger writes only to stderr, and Flush() runs once at startup purely for its logging side effect - it returns nothing and touches no command result, exit code, or stdout, so machine-readable output (-o json / -o yaml) is unaffected. If the filter were wrong, the effect is limited to which buffered lines land on stderr, and only in the under-emitting direction: the per-level emit methods re-gate each line, so a wrong filter still cannot surface a line more verbose than the active level (credential-bearing UNSAFE_TRACE output stays gated behind --unsafe-trace regardless). No customer-facing command would break.

References

  • Stacked on the migrate-mocker-to-mockgen base; part of a small logging-fix stack.

Test & Review

  • Added a regression test in pkg/log/logger_test.go asserting Flush() emits buffered lines at or below the threshold and drops the more-verbose ones.
  • A/B verified by hand: at -vvvv, the same command emitted 0 buffered [DEBUG] lines before the fix and 4 after.
  • go test ./pkg/log/... passes.

@confluent-cla-assistant

Copy link
Copy Markdown

🎉 All Contributor License Agreements have been signed. Ready to merge.
Please push an empty commit if you would like to re-run the checks to verify CLA status for all contributors.

@shouplesDave Shoup (shouples) changed the title fix(log): emit the buffered lines Flush() droppedfix(log): emit the buffered lines Flush() droppedAug 21, 2026
Flush replays buffered messages once verbosity is raised (a message logged
before -v is parsed, say). The filter was `lm.level < l.Level`, but a higher
Level value is more verbose, so it skipped exactly the messages now within
the threshold and emitted the rest. Corrected to `>`, with a regression
test that logs at DEBUG, raises verbosity, and asserts the message appears.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@sonarqube-confluent

Copy link
Copy Markdown

Sign up for freeto 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.

1 participant

@shouples
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(log): emit the buffered lines Flush() dropped - #3464

Draft
Dave Shoup (shouples) wants to merge 1 commit into
djs/migrate-mocker-to-mockgenfrom
djs/fix-log-flush
Draft

fix(log): emit the buffered lines Flush() dropped#3464
Dave Shoup (shouples) wants to merge 1 commit into
djs/migrate-mocker-to-mockgenfrom
djs/fix-log-flush

Conversation

@shouples

Copy link
Copy Markdown
Contributor

Release Notes

Bug Fixes

  • Fixed verbose logging (-v) dropping buffered log lines it should have emitted, and emitting the low-priority ones instead.

Checklist

  • I have successfully built and used a custom CLI binary, without linter issues from this PR.
  • I have clearly specified in the What section below whether this PR applies to Confluent Cloud, Confluent Platform, or both.
  • I have verified this PR in Confluent Cloud pre-prod or production environment, if applicable.
  • I have verified this PR in Confluent Platform on-premises environment, if applicable.
  • I have attached manual CLI verification results or screenshots in the Test & Review section below.
  • I have added appropriate CLI integration or unit tests for any new or updated commands and functionality.
  • I confirm that this PR introduces no breaking changes or backward compatibility issues.
  • I have indicated the potential customer impact if something goes wrong in the Blast Radius section below.
  • I have put checkmarks below confirming that the feature associated with this PR is enabled in:
    • Confluent Cloud prod
    • Confluent Cloud stag
    • Confluent Platform
    • Check this box if the feature is enabled for certain organizations only

Applies to both Cloud and Platform (shared logging). Feature-flag items are N/A - this is a bug fix, not a gated feature.

What

The CLI buffers log lines and flushes them later (for example, to attach context to an error). The flush filter that decides which buffered lines to emit was inverted, so it dropped exactly the lines it should have kept - the more important, less verbose ones - and emitted the rest.

pkg/log/logger.go's Flush() had if lm.level < l.Level { continue }. Higher level values mean more verbose, so a buffered line should be emitted when its level is at or below the current threshold (lm.level <= l.Level), not skipped when it is below. The one-character fix flips the comparison to >, and a regression test pins the behavior so it cannot silently invert again.

Same command at -vvv (verbosity = DEBUG), with four lines buffered before verbosity was parsed:

# before (buggy `<`): drops the WARN and INFO lines the user should see
[DEBUG] debug: low-level detail
# after (fixed `>`): everything at or below the requested level is emitted
[WARN] warn: rare but handled
[INFO] info: steady-state
[DEBUG] debug: low-level detail

(TRACE is correctly withheld in both - it is more verbose than the requested DEBUG.)

Applies to: both Confluent Cloud and Confluent Platform (shared logging code).

Blast Radius

Very small, and confined to diagnostic logging. The logger writes only to stderr, and Flush() runs once at startup purely for its logging side effect - it returns nothing and touches no command result, exit code, or stdout, so machine-readable output (-o json / -o yaml) is unaffected. If the filter were wrong, the effect is limited to which buffered lines land on stderr, and only in the under-emitting direction: the per-level emit methods re-gate each line, so a wrong filter still cannot surface a line more verbose than the active level (credential-bearing UNSAFE_TRACE output stays gated behind --unsafe-trace regardless). No customer-facing command would break.

References

  • Stacked on the migrate-mocker-to-mockgen base; part of a small logging-fix stack.

Test & Review

  • Added a regression test in pkg/log/logger_test.go asserting Flush() emits buffered lines at or below the threshold and drops the more-verbose ones.
  • A/B verified by hand: at -vvvv, the same command emitted 0 buffered [DEBUG] lines before the fix and 4 after.
  • go test ./pkg/log/... passes.

@confluent-cla-assistant

Copy link
Copy Markdown

🎉 All Contributor License Agreements have been signed. Ready to merge.
Please push an empty commit if you would like to re-run the checks to verify CLA status for all contributors.

@shouplesDave Shoup (shouples) changed the title fix(log): emit the buffered lines Flush() droppedfix(log): emit the buffered lines Flush() droppedAug 21, 2026
Flush replays buffered messages once verbosity is raised (a message logged
before -v is parsed, say). The filter was `lm.level < l.Level`, but a higher
Level value is more verbose, so it skipped exactly the messages now within
the threshold and emitted the rest. Corrected to `>`, with a regression
test that logs at DEBUG, raises verbosity, and asserts the message appears.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@sonarqube-confluent

Copy link
Copy Markdown

Sign up for freeto 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.

1 participant

@shouples