Skip to content

feat(core): Add client.captureLog method - #15715

Closed
AbhiPrasad wants to merge 1 commit into
developfrom
abhi-logs-in-client
Closed

feat(core): Add client.captureLog method#15715
AbhiPrasad wants to merge 1 commit into
developfrom
abhi-logs-in-client

Conversation

@AbhiPrasad

@AbhiPrasadAbhiPrasad commented Mar 17, 2025

Copy link
Copy Markdown
Contributor

ref #15526

This PR adds the captureLog method to the client.

Description

captureLog takes in a log interface as well as a scope, and constructs a serialized log to send to Sentry. Instead of directly sending the serialized log, it adds it to a log buffer that is flushed based on some strategy. As a fallback, the buffer flushes itself when it gets over 100 items, which ensures we never get a payload thats too large.

The browser and server runtime client are expected to add more advanced flushing strategies on top of the simple implementation in the base client. For now this PR only adds a simple interval based flushing strategy to the browser to show how this would work. We'll keep the browser implementation for now, and evaluate implementations for the server-runtime-client moving forward.

The serialized log that is constructed by captureLog send logs via the opentelemetry format. This is temporary, in the future we'll switch to the sentry logs protocol, but while that gets ready we are using the OTEL one.

Bundle Size

Adding to the core client will introduce bundle size concerns, but considering the long-term strategy is that logs will supercede breadcrumbs, I think we have no choice but to accept this hint.

I created #15717 as an example of how we could do this in a way that's less bundle size intensive.

Next steps

  1. Add flushing strategy for server-runtime-client
  2. Implement top-level API methods as per develop spec
  3. Add support for paramaterized strings
  4. Add integration tests to validate envelope gets sent correctly

@AbhiPrasad
AbhiPrasad requested review from a team and mydeaMarch 17, 2025 17:10
@AbhiPrasadAbhiPrasad self-assigned this Mar 17, 2025
@AbhiPrasad
AbhiPrasad requested review from chargome and removed request for a teamMarch 17, 2025 17:10
@AbhiPrasadAbhiPrasad mentioned this pull request Mar 17, 2025
7 tasks
@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
⛔️ @sentry/browser (max: 23.44 KB)23.66 KB+2.22%+526 B 🔺
@sentry/browser - with treeshaking flags23.48 KB+2.36%+553 B 🔺
⛔️ @sentry/browser (incl. Tracing) (max: 36.62 KB)36.69 KB+1.34%+496 B 🔺
⛔️ @sentry/browser (incl. Tracing, Replay) (max: 73.44 KB)73.87 KB+0.65%+488 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags67.3 KB+0.75%+511 B 🔺
⛔️ @sentry/browser (incl. Tracing, Replay with Canvas) (max: 78.13 KB)78.5 KB+0.63%+503 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback)91.06 KB+0.55%+501 B 🔺
@sentry/browser (incl. Feedback)40.81 KB+1.28%+528 B 🔺
@sentry/browser (incl. sendFeedback)28.3 KB+1.87%+531 B 🔺
@sentry/browser (incl. FeedbackAsync)33.09 KB+1.6%+531 B 🔺
@sentry/react25.48 KB+2.05%+524 B 🔺
@sentry/react (incl. Tracing)38.63 KB+1.4%+546 B 🔺
@sentry/vue27.89 KB+1.79%+502 B 🔺
@sentry/vue (incl. Tracing)38.39 KB+1.29%+499 B 🔺
@sentry/svelte23.69 KB+2.2%+522 B 🔺
CDN Bundle24.8 KB+1.82%+453 B 🔺
CDN Bundle (incl. Tracing)36.7 KB+1.23%+454 B 🔺
CDN Bundle (incl. Tracing, Replay)71.7 KB+0.6%+435 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)76.9 KB+0.6%+464 B 🔺
CDN Bundle - uncompressed72.48 KB+1.82%+1.29 KB 🔺
CDN Bundle (incl. Tracing) - uncompressed108.86 KB+1.21%+1.29 KB 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed220.12 KB+0.59%+1.29 KB 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed232.68 KB+0.56%+1.29 KB 🔺
@sentry/nextjs (client)39.79 KB+1.33%+534 B 🔺
@sentry/sveltekit (client)37.1 KB+1.3%+486 B 🔺
@sentry/node142.72 KB+0.31%+450 B 🔺
@sentry/node - without tracing96.12 KB+0.44%+426 B 🔺
@sentry/aws-serverless120.46 KB+0.34%+412 B 🔺

View base workflow run

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Please see #15717 as an example of how to do this without adding code to the client.

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Closing this because of #15526 (comment)

@AbhiPrasad
AbhiPrasad deleted the abhi-logs-in-client branch March 24, 2025 19:20
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

@AbhiPrasad
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
feat(core): Add `client.captureLog` method by AbhiPrasad · Pull Request #15715 · getsentry/sentry-javascript · GitHub
Skip to content

feat(core): Add client.captureLog method - #15715

Closed
AbhiPrasad wants to merge 1 commit into
developfrom
abhi-logs-in-client
Closed

feat(core): Add client.captureLog method#15715
AbhiPrasad wants to merge 1 commit into
developfrom
abhi-logs-in-client

Conversation

@AbhiPrasad

@AbhiPrasadAbhiPrasad commented Mar 17, 2025

Copy link
Copy Markdown
Contributor

ref #15526

This PR adds the captureLog method to the client.

Description

captureLog takes in a log interface as well as a scope, and constructs a serialized log to send to Sentry. Instead of directly sending the serialized log, it adds it to a log buffer that is flushed based on some strategy. As a fallback, the buffer flushes itself when it gets over 100 items, which ensures we never get a payload thats too large.

The browser and server runtime client are expected to add more advanced flushing strategies on top of the simple implementation in the base client. For now this PR only adds a simple interval based flushing strategy to the browser to show how this would work. We'll keep the browser implementation for now, and evaluate implementations for the server-runtime-client moving forward.

The serialized log that is constructed by captureLog send logs via the opentelemetry format. This is temporary, in the future we'll switch to the sentry logs protocol, but while that gets ready we are using the OTEL one.

Bundle Size

Adding to the core client will introduce bundle size concerns, but considering the long-term strategy is that logs will supercede breadcrumbs, I think we have no choice but to accept this hint.

I created #15717 as an example of how we could do this in a way that's less bundle size intensive.

Next steps

  1. Add flushing strategy for server-runtime-client
  2. Implement top-level API methods as per develop spec
  3. Add support for paramaterized strings
  4. Add integration tests to validate envelope gets sent correctly

@AbhiPrasad
AbhiPrasad requested review from a team and mydeaMarch 17, 2025 17:10
@AbhiPrasadAbhiPrasad self-assigned this Mar 17, 2025
@AbhiPrasad
AbhiPrasad requested review from chargome and removed request for a teamMarch 17, 2025 17:10
@AbhiPrasadAbhiPrasad mentioned this pull request Mar 17, 2025
7 tasks
@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
⛔️ @sentry/browser (max: 23.44 KB)23.66 KB+2.22%+526 B 🔺
@sentry/browser - with treeshaking flags23.48 KB+2.36%+553 B 🔺
⛔️ @sentry/browser (incl. Tracing) (max: 36.62 KB)36.69 KB+1.34%+496 B 🔺
⛔️ @sentry/browser (incl. Tracing, Replay) (max: 73.44 KB)73.87 KB+0.65%+488 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags67.3 KB+0.75%+511 B 🔺
⛔️ @sentry/browser (incl. Tracing, Replay with Canvas) (max: 78.13 KB)78.5 KB+0.63%+503 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback)91.06 KB+0.55%+501 B 🔺
@sentry/browser (incl. Feedback)40.81 KB+1.28%+528 B 🔺
@sentry/browser (incl. sendFeedback)28.3 KB+1.87%+531 B 🔺
@sentry/browser (incl. FeedbackAsync)33.09 KB+1.6%+531 B 🔺
@sentry/react25.48 KB+2.05%+524 B 🔺
@sentry/react (incl. Tracing)38.63 KB+1.4%+546 B 🔺
@sentry/vue27.89 KB+1.79%+502 B 🔺
@sentry/vue (incl. Tracing)38.39 KB+1.29%+499 B 🔺
@sentry/svelte23.69 KB+2.2%+522 B 🔺
CDN Bundle24.8 KB+1.82%+453 B 🔺
CDN Bundle (incl. Tracing)36.7 KB+1.23%+454 B 🔺
CDN Bundle (incl. Tracing, Replay)71.7 KB+0.6%+435 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)76.9 KB+0.6%+464 B 🔺
CDN Bundle - uncompressed72.48 KB+1.82%+1.29 KB 🔺
CDN Bundle (incl. Tracing) - uncompressed108.86 KB+1.21%+1.29 KB 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed220.12 KB+0.59%+1.29 KB 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed232.68 KB+0.56%+1.29 KB 🔺
@sentry/nextjs (client)39.79 KB+1.33%+534 B 🔺
@sentry/sveltekit (client)37.1 KB+1.3%+486 B 🔺
@sentry/node142.72 KB+0.31%+450 B 🔺
@sentry/node - without tracing96.12 KB+0.44%+426 B 🔺
@sentry/aws-serverless120.46 KB+0.34%+412 B 🔺

View base workflow run

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Please see #15717 as an example of how to do this without adding code to the client.

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Closing this because of #15526 (comment)

@AbhiPrasad
AbhiPrasad deleted the abhi-logs-in-client branch March 24, 2025 19:20
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

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

feat(core): Add client.captureLog method - #15715

Closed
AbhiPrasad wants to merge 1 commit into
developfrom
abhi-logs-in-client
Closed

feat(core): Add client.captureLog method#15715
AbhiPrasad wants to merge 1 commit into
developfrom
abhi-logs-in-client

Conversation

@AbhiPrasad

@AbhiPrasadAbhiPrasad commented Mar 17, 2025

Copy link
Copy Markdown
Contributor

ref #15526

This PR adds the captureLog method to the client.

Description

captureLog takes in a log interface as well as a scope, and constructs a serialized log to send to Sentry. Instead of directly sending the serialized log, it adds it to a log buffer that is flushed based on some strategy. As a fallback, the buffer flushes itself when it gets over 100 items, which ensures we never get a payload thats too large.

The browser and server runtime client are expected to add more advanced flushing strategies on top of the simple implementation in the base client. For now this PR only adds a simple interval based flushing strategy to the browser to show how this would work. We'll keep the browser implementation for now, and evaluate implementations for the server-runtime-client moving forward.

The serialized log that is constructed by captureLog send logs via the opentelemetry format. This is temporary, in the future we'll switch to the sentry logs protocol, but while that gets ready we are using the OTEL one.

Bundle Size

Adding to the core client will introduce bundle size concerns, but considering the long-term strategy is that logs will supercede breadcrumbs, I think we have no choice but to accept this hint.

I created #15717 as an example of how we could do this in a way that's less bundle size intensive.

Next steps

  1. Add flushing strategy for server-runtime-client
  2. Implement top-level API methods as per develop spec
  3. Add support for paramaterized strings
  4. Add integration tests to validate envelope gets sent correctly

@AbhiPrasad
AbhiPrasad requested review from a team and mydeaMarch 17, 2025 17:10
@AbhiPrasadAbhiPrasad self-assigned this Mar 17, 2025
@AbhiPrasad
AbhiPrasad requested review from chargome and removed request for a teamMarch 17, 2025 17:10
@AbhiPrasadAbhiPrasad mentioned this pull request Mar 17, 2025
7 tasks
@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
⛔️ @sentry/browser (max: 23.44 KB)23.66 KB+2.22%+526 B 🔺
@sentry/browser - with treeshaking flags23.48 KB+2.36%+553 B 🔺
⛔️ @sentry/browser (incl. Tracing) (max: 36.62 KB)36.69 KB+1.34%+496 B 🔺
⛔️ @sentry/browser (incl. Tracing, Replay) (max: 73.44 KB)73.87 KB+0.65%+488 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags67.3 KB+0.75%+511 B 🔺
⛔️ @sentry/browser (incl. Tracing, Replay with Canvas) (max: 78.13 KB)78.5 KB+0.63%+503 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback)91.06 KB+0.55%+501 B 🔺
@sentry/browser (incl. Feedback)40.81 KB+1.28%+528 B 🔺
@sentry/browser (incl. sendFeedback)28.3 KB+1.87%+531 B 🔺
@sentry/browser (incl. FeedbackAsync)33.09 KB+1.6%+531 B 🔺
@sentry/react25.48 KB+2.05%+524 B 🔺
@sentry/react (incl. Tracing)38.63 KB+1.4%+546 B 🔺
@sentry/vue27.89 KB+1.79%+502 B 🔺
@sentry/vue (incl. Tracing)38.39 KB+1.29%+499 B 🔺
@sentry/svelte23.69 KB+2.2%+522 B 🔺
CDN Bundle24.8 KB+1.82%+453 B 🔺
CDN Bundle (incl. Tracing)36.7 KB+1.23%+454 B 🔺
CDN Bundle (incl. Tracing, Replay)71.7 KB+0.6%+435 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)76.9 KB+0.6%+464 B 🔺
CDN Bundle - uncompressed72.48 KB+1.82%+1.29 KB 🔺
CDN Bundle (incl. Tracing) - uncompressed108.86 KB+1.21%+1.29 KB 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed220.12 KB+0.59%+1.29 KB 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed232.68 KB+0.56%+1.29 KB 🔺
@sentry/nextjs (client)39.79 KB+1.33%+534 B 🔺
@sentry/sveltekit (client)37.1 KB+1.3%+486 B 🔺
@sentry/node142.72 KB+0.31%+450 B 🔺
@sentry/node - without tracing96.12 KB+0.44%+426 B 🔺
@sentry/aws-serverless120.46 KB+0.34%+412 B 🔺

View base workflow run

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Please see #15717 as an example of how to do this without adding code to the client.

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Closing this because of #15526 (comment)

@AbhiPrasad
AbhiPrasad deleted the abhi-logs-in-client branch March 24, 2025 19:20
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

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

feat(core): Add client.captureLog method - #15715

Closed
AbhiPrasad wants to merge 1 commit into
developfrom
abhi-logs-in-client
Closed

feat(core): Add client.captureLog method#15715
AbhiPrasad wants to merge 1 commit into
developfrom
abhi-logs-in-client

Conversation

@AbhiPrasad

@AbhiPrasadAbhiPrasad commented Mar 17, 2025

Copy link
Copy Markdown
Contributor

ref #15526

This PR adds the captureLog method to the client.

Description

captureLog takes in a log interface as well as a scope, and constructs a serialized log to send to Sentry. Instead of directly sending the serialized log, it adds it to a log buffer that is flushed based on some strategy. As a fallback, the buffer flushes itself when it gets over 100 items, which ensures we never get a payload thats too large.

The browser and server runtime client are expected to add more advanced flushing strategies on top of the simple implementation in the base client. For now this PR only adds a simple interval based flushing strategy to the browser to show how this would work. We'll keep the browser implementation for now, and evaluate implementations for the server-runtime-client moving forward.

The serialized log that is constructed by captureLog send logs via the opentelemetry format. This is temporary, in the future we'll switch to the sentry logs protocol, but while that gets ready we are using the OTEL one.

Bundle Size

Adding to the core client will introduce bundle size concerns, but considering the long-term strategy is that logs will supercede breadcrumbs, I think we have no choice but to accept this hint.

I created #15717 as an example of how we could do this in a way that's less bundle size intensive.

Next steps

  1. Add flushing strategy for server-runtime-client
  2. Implement top-level API methods as per develop spec
  3. Add support for paramaterized strings
  4. Add integration tests to validate envelope gets sent correctly

@AbhiPrasad
AbhiPrasad requested review from a team and mydeaMarch 17, 2025 17:10
@AbhiPrasadAbhiPrasad self-assigned this Mar 17, 2025
@AbhiPrasad
AbhiPrasad requested review from chargome and removed request for a teamMarch 17, 2025 17:10
@AbhiPrasadAbhiPrasad mentioned this pull request Mar 17, 2025
7 tasks
@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
⛔️ @sentry/browser (max: 23.44 KB)23.66 KB+2.22%+526 B 🔺
@sentry/browser - with treeshaking flags23.48 KB+2.36%+553 B 🔺
⛔️ @sentry/browser (incl. Tracing) (max: 36.62 KB)36.69 KB+1.34%+496 B 🔺
⛔️ @sentry/browser (incl. Tracing, Replay) (max: 73.44 KB)73.87 KB+0.65%+488 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags67.3 KB+0.75%+511 B 🔺
⛔️ @sentry/browser (incl. Tracing, Replay with Canvas) (max: 78.13 KB)78.5 KB+0.63%+503 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback)91.06 KB+0.55%+501 B 🔺
@sentry/browser (incl. Feedback)40.81 KB+1.28%+528 B 🔺
@sentry/browser (incl. sendFeedback)28.3 KB+1.87%+531 B 🔺
@sentry/browser (incl. FeedbackAsync)33.09 KB+1.6%+531 B 🔺
@sentry/react25.48 KB+2.05%+524 B 🔺
@sentry/react (incl. Tracing)38.63 KB+1.4%+546 B 🔺
@sentry/vue27.89 KB+1.79%+502 B 🔺
@sentry/vue (incl. Tracing)38.39 KB+1.29%+499 B 🔺
@sentry/svelte23.69 KB+2.2%+522 B 🔺
CDN Bundle24.8 KB+1.82%+453 B 🔺
CDN Bundle (incl. Tracing)36.7 KB+1.23%+454 B 🔺
CDN Bundle (incl. Tracing, Replay)71.7 KB+0.6%+435 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)76.9 KB+0.6%+464 B 🔺
CDN Bundle - uncompressed72.48 KB+1.82%+1.29 KB 🔺
CDN Bundle (incl. Tracing) - uncompressed108.86 KB+1.21%+1.29 KB 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed220.12 KB+0.59%+1.29 KB 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed232.68 KB+0.56%+1.29 KB 🔺
@sentry/nextjs (client)39.79 KB+1.33%+534 B 🔺
@sentry/sveltekit (client)37.1 KB+1.3%+486 B 🔺
@sentry/node142.72 KB+0.31%+450 B 🔺
@sentry/node - without tracing96.12 KB+0.44%+426 B 🔺
@sentry/aws-serverless120.46 KB+0.34%+412 B 🔺

View base workflow run

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Please see #15717 as an example of how to do this without adding code to the client.

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Closing this because of #15526 (comment)

@AbhiPrasad
AbhiPrasad deleted the abhi-logs-in-client branch March 24, 2025 19:20
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

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

feat(core): Add client.captureLog method - #15715

Closed
AbhiPrasad wants to merge 1 commit into
developfrom
abhi-logs-in-client
Closed

feat(core): Add client.captureLog method#15715
AbhiPrasad wants to merge 1 commit into
developfrom
abhi-logs-in-client

Conversation

@AbhiPrasad

@AbhiPrasadAbhiPrasad commented Mar 17, 2025

Copy link
Copy Markdown
Contributor

ref #15526

This PR adds the captureLog method to the client.

Description

captureLog takes in a log interface as well as a scope, and constructs a serialized log to send to Sentry. Instead of directly sending the serialized log, it adds it to a log buffer that is flushed based on some strategy. As a fallback, the buffer flushes itself when it gets over 100 items, which ensures we never get a payload thats too large.

The browser and server runtime client are expected to add more advanced flushing strategies on top of the simple implementation in the base client. For now this PR only adds a simple interval based flushing strategy to the browser to show how this would work. We'll keep the browser implementation for now, and evaluate implementations for the server-runtime-client moving forward.

The serialized log that is constructed by captureLog send logs via the opentelemetry format. This is temporary, in the future we'll switch to the sentry logs protocol, but while that gets ready we are using the OTEL one.

Bundle Size

Adding to the core client will introduce bundle size concerns, but considering the long-term strategy is that logs will supercede breadcrumbs, I think we have no choice but to accept this hint.

I created #15717 as an example of how we could do this in a way that's less bundle size intensive.

Next steps

  1. Add flushing strategy for server-runtime-client
  2. Implement top-level API methods as per develop spec
  3. Add support for paramaterized strings
  4. Add integration tests to validate envelope gets sent correctly

@AbhiPrasad
AbhiPrasad requested review from a team and mydeaMarch 17, 2025 17:10
@AbhiPrasadAbhiPrasad self-assigned this Mar 17, 2025
@AbhiPrasad
AbhiPrasad requested review from chargome and removed request for a teamMarch 17, 2025 17:10
@AbhiPrasadAbhiPrasad mentioned this pull request Mar 17, 2025
7 tasks
@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
⛔️ @sentry/browser (max: 23.44 KB)23.66 KB+2.22%+526 B 🔺
@sentry/browser - with treeshaking flags23.48 KB+2.36%+553 B 🔺
⛔️ @sentry/browser (incl. Tracing) (max: 36.62 KB)36.69 KB+1.34%+496 B 🔺
⛔️ @sentry/browser (incl. Tracing, Replay) (max: 73.44 KB)73.87 KB+0.65%+488 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags67.3 KB+0.75%+511 B 🔺
⛔️ @sentry/browser (incl. Tracing, Replay with Canvas) (max: 78.13 KB)78.5 KB+0.63%+503 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback)91.06 KB+0.55%+501 B 🔺
@sentry/browser (incl. Feedback)40.81 KB+1.28%+528 B 🔺
@sentry/browser (incl. sendFeedback)28.3 KB+1.87%+531 B 🔺
@sentry/browser (incl. FeedbackAsync)33.09 KB+1.6%+531 B 🔺
@sentry/react25.48 KB+2.05%+524 B 🔺
@sentry/react (incl. Tracing)38.63 KB+1.4%+546 B 🔺
@sentry/vue27.89 KB+1.79%+502 B 🔺
@sentry/vue (incl. Tracing)38.39 KB+1.29%+499 B 🔺
@sentry/svelte23.69 KB+2.2%+522 B 🔺
CDN Bundle24.8 KB+1.82%+453 B 🔺
CDN Bundle (incl. Tracing)36.7 KB+1.23%+454 B 🔺
CDN Bundle (incl. Tracing, Replay)71.7 KB+0.6%+435 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)76.9 KB+0.6%+464 B 🔺
CDN Bundle - uncompressed72.48 KB+1.82%+1.29 KB 🔺
CDN Bundle (incl. Tracing) - uncompressed108.86 KB+1.21%+1.29 KB 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed220.12 KB+0.59%+1.29 KB 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed232.68 KB+0.56%+1.29 KB 🔺
@sentry/nextjs (client)39.79 KB+1.33%+534 B 🔺
@sentry/sveltekit (client)37.1 KB+1.3%+486 B 🔺
@sentry/node142.72 KB+0.31%+450 B 🔺
@sentry/node - without tracing96.12 KB+0.44%+426 B 🔺
@sentry/aws-serverless120.46 KB+0.34%+412 B 🔺

View base workflow run

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Please see #15717 as an example of how to do this without adding code to the client.

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Closing this because of #15526 (comment)

@AbhiPrasad
AbhiPrasad deleted the abhi-logs-in-client branch March 24, 2025 19:20
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

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

feat(core): Add client.captureLog method - #15715

Closed
AbhiPrasad wants to merge 1 commit into
developfrom
abhi-logs-in-client
Closed

feat(core): Add client.captureLog method#15715
AbhiPrasad wants to merge 1 commit into
developfrom
abhi-logs-in-client

Conversation

@AbhiPrasad

@AbhiPrasadAbhiPrasad commented Mar 17, 2025

Copy link
Copy Markdown
Contributor

ref #15526

This PR adds the captureLog method to the client.

Description

captureLog takes in a log interface as well as a scope, and constructs a serialized log to send to Sentry. Instead of directly sending the serialized log, it adds it to a log buffer that is flushed based on some strategy. As a fallback, the buffer flushes itself when it gets over 100 items, which ensures we never get a payload thats too large.

The browser and server runtime client are expected to add more advanced flushing strategies on top of the simple implementation in the base client. For now this PR only adds a simple interval based flushing strategy to the browser to show how this would work. We'll keep the browser implementation for now, and evaluate implementations for the server-runtime-client moving forward.

The serialized log that is constructed by captureLog send logs via the opentelemetry format. This is temporary, in the future we'll switch to the sentry logs protocol, but while that gets ready we are using the OTEL one.

Bundle Size

Adding to the core client will introduce bundle size concerns, but considering the long-term strategy is that logs will supercede breadcrumbs, I think we have no choice but to accept this hint.

I created #15717 as an example of how we could do this in a way that's less bundle size intensive.

Next steps

  1. Add flushing strategy for server-runtime-client
  2. Implement top-level API methods as per develop spec
  3. Add support for paramaterized strings
  4. Add integration tests to validate envelope gets sent correctly

@AbhiPrasad
AbhiPrasad requested review from a team and mydeaMarch 17, 2025 17:10
@AbhiPrasadAbhiPrasad self-assigned this Mar 17, 2025
@AbhiPrasad
AbhiPrasad requested review from chargome and removed request for a teamMarch 17, 2025 17:10
@AbhiPrasadAbhiPrasad mentioned this pull request Mar 17, 2025
7 tasks
@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
⛔️ @sentry/browser (max: 23.44 KB)23.66 KB+2.22%+526 B 🔺
@sentry/browser - with treeshaking flags23.48 KB+2.36%+553 B 🔺
⛔️ @sentry/browser (incl. Tracing) (max: 36.62 KB)36.69 KB+1.34%+496 B 🔺
⛔️ @sentry/browser (incl. Tracing, Replay) (max: 73.44 KB)73.87 KB+0.65%+488 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags67.3 KB+0.75%+511 B 🔺
⛔️ @sentry/browser (incl. Tracing, Replay with Canvas) (max: 78.13 KB)78.5 KB+0.63%+503 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback)91.06 KB+0.55%+501 B 🔺
@sentry/browser (incl. Feedback)40.81 KB+1.28%+528 B 🔺
@sentry/browser (incl. sendFeedback)28.3 KB+1.87%+531 B 🔺
@sentry/browser (incl. FeedbackAsync)33.09 KB+1.6%+531 B 🔺
@sentry/react25.48 KB+2.05%+524 B 🔺
@sentry/react (incl. Tracing)38.63 KB+1.4%+546 B 🔺
@sentry/vue27.89 KB+1.79%+502 B 🔺
@sentry/vue (incl. Tracing)38.39 KB+1.29%+499 B 🔺
@sentry/svelte23.69 KB+2.2%+522 B 🔺
CDN Bundle24.8 KB+1.82%+453 B 🔺
CDN Bundle (incl. Tracing)36.7 KB+1.23%+454 B 🔺
CDN Bundle (incl. Tracing, Replay)71.7 KB+0.6%+435 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)76.9 KB+0.6%+464 B 🔺
CDN Bundle - uncompressed72.48 KB+1.82%+1.29 KB 🔺
CDN Bundle (incl. Tracing) - uncompressed108.86 KB+1.21%+1.29 KB 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed220.12 KB+0.59%+1.29 KB 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed232.68 KB+0.56%+1.29 KB 🔺
@sentry/nextjs (client)39.79 KB+1.33%+534 B 🔺
@sentry/sveltekit (client)37.1 KB+1.3%+486 B 🔺
@sentry/node142.72 KB+0.31%+450 B 🔺
@sentry/node - without tracing96.12 KB+0.44%+426 B 🔺
@sentry/aws-serverless120.46 KB+0.34%+412 B 🔺

View base workflow run

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Please see #15717 as an example of how to do this without adding code to the client.

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Closing this because of #15526 (comment)

@AbhiPrasad
AbhiPrasad deleted the abhi-logs-in-client branch March 24, 2025 19:20
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

@AbhiPrasad
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat(core): Add `client.captureLog` method by AbhiPrasad · Pull Request #15715 · getsentry/sentry-javascript · GitHub
Skip to content

feat(core): Add client.captureLog method - #15715

Closed
AbhiPrasad wants to merge 1 commit into
developfrom
abhi-logs-in-client
Closed

feat(core): Add client.captureLog method#15715
AbhiPrasad wants to merge 1 commit into
developfrom
abhi-logs-in-client

Conversation

@AbhiPrasad

@AbhiPrasadAbhiPrasad commented Mar 17, 2025

Copy link
Copy Markdown
Contributor

ref #15526

This PR adds the captureLog method to the client.

Description

captureLog takes in a log interface as well as a scope, and constructs a serialized log to send to Sentry. Instead of directly sending the serialized log, it adds it to a log buffer that is flushed based on some strategy. As a fallback, the buffer flushes itself when it gets over 100 items, which ensures we never get a payload thats too large.

The browser and server runtime client are expected to add more advanced flushing strategies on top of the simple implementation in the base client. For now this PR only adds a simple interval based flushing strategy to the browser to show how this would work. We'll keep the browser implementation for now, and evaluate implementations for the server-runtime-client moving forward.

The serialized log that is constructed by captureLog send logs via the opentelemetry format. This is temporary, in the future we'll switch to the sentry logs protocol, but while that gets ready we are using the OTEL one.

Bundle Size

Adding to the core client will introduce bundle size concerns, but considering the long-term strategy is that logs will supercede breadcrumbs, I think we have no choice but to accept this hint.

I created #15717 as an example of how we could do this in a way that's less bundle size intensive.

Next steps

  1. Add flushing strategy for server-runtime-client
  2. Implement top-level API methods as per develop spec
  3. Add support for paramaterized strings
  4. Add integration tests to validate envelope gets sent correctly

@AbhiPrasad
AbhiPrasad requested review from a team and mydeaMarch 17, 2025 17:10
@AbhiPrasadAbhiPrasad self-assigned this Mar 17, 2025
@AbhiPrasad
AbhiPrasad requested review from chargome and removed request for a teamMarch 17, 2025 17:10
@AbhiPrasadAbhiPrasad mentioned this pull request Mar 17, 2025
7 tasks
@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
⛔️ @sentry/browser (max: 23.44 KB)23.66 KB+2.22%+526 B 🔺
@sentry/browser - with treeshaking flags23.48 KB+2.36%+553 B 🔺
⛔️ @sentry/browser (incl. Tracing) (max: 36.62 KB)36.69 KB+1.34%+496 B 🔺
⛔️ @sentry/browser (incl. Tracing, Replay) (max: 73.44 KB)73.87 KB+0.65%+488 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags67.3 KB+0.75%+511 B 🔺
⛔️ @sentry/browser (incl. Tracing, Replay with Canvas) (max: 78.13 KB)78.5 KB+0.63%+503 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback)91.06 KB+0.55%+501 B 🔺
@sentry/browser (incl. Feedback)40.81 KB+1.28%+528 B 🔺
@sentry/browser (incl. sendFeedback)28.3 KB+1.87%+531 B 🔺
@sentry/browser (incl. FeedbackAsync)33.09 KB+1.6%+531 B 🔺
@sentry/react25.48 KB+2.05%+524 B 🔺
@sentry/react (incl. Tracing)38.63 KB+1.4%+546 B 🔺
@sentry/vue27.89 KB+1.79%+502 B 🔺
@sentry/vue (incl. Tracing)38.39 KB+1.29%+499 B 🔺
@sentry/svelte23.69 KB+2.2%+522 B 🔺
CDN Bundle24.8 KB+1.82%+453 B 🔺
CDN Bundle (incl. Tracing)36.7 KB+1.23%+454 B 🔺
CDN Bundle (incl. Tracing, Replay)71.7 KB+0.6%+435 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)76.9 KB+0.6%+464 B 🔺
CDN Bundle - uncompressed72.48 KB+1.82%+1.29 KB 🔺
CDN Bundle (incl. Tracing) - uncompressed108.86 KB+1.21%+1.29 KB 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed220.12 KB+0.59%+1.29 KB 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed232.68 KB+0.56%+1.29 KB 🔺
@sentry/nextjs (client)39.79 KB+1.33%+534 B 🔺
@sentry/sveltekit (client)37.1 KB+1.3%+486 B 🔺
@sentry/node142.72 KB+0.31%+450 B 🔺
@sentry/node - without tracing96.12 KB+0.44%+426 B 🔺
@sentry/aws-serverless120.46 KB+0.34%+412 B 🔺

View base workflow run

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Please see #15717 as an example of how to do this without adding code to the client.

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Closing this because of #15526 (comment)

@AbhiPrasad
AbhiPrasad deleted the abhi-logs-in-client branch March 24, 2025 19:20
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

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

feat(core): Add client.captureLog method - #15715

Closed
AbhiPrasad wants to merge 1 commit into
developfrom
abhi-logs-in-client
Closed

feat(core): Add client.captureLog method#15715
AbhiPrasad wants to merge 1 commit into
developfrom
abhi-logs-in-client

Conversation

@AbhiPrasad

@AbhiPrasadAbhiPrasad commented Mar 17, 2025

Copy link
Copy Markdown
Contributor

ref #15526

This PR adds the captureLog method to the client.

Description

captureLog takes in a log interface as well as a scope, and constructs a serialized log to send to Sentry. Instead of directly sending the serialized log, it adds it to a log buffer that is flushed based on some strategy. As a fallback, the buffer flushes itself when it gets over 100 items, which ensures we never get a payload thats too large.

The browser and server runtime client are expected to add more advanced flushing strategies on top of the simple implementation in the base client. For now this PR only adds a simple interval based flushing strategy to the browser to show how this would work. We'll keep the browser implementation for now, and evaluate implementations for the server-runtime-client moving forward.

The serialized log that is constructed by captureLog send logs via the opentelemetry format. This is temporary, in the future we'll switch to the sentry logs protocol, but while that gets ready we are using the OTEL one.

Bundle Size

Adding to the core client will introduce bundle size concerns, but considering the long-term strategy is that logs will supercede breadcrumbs, I think we have no choice but to accept this hint.

I created #15717 as an example of how we could do this in a way that's less bundle size intensive.

Next steps

  1. Add flushing strategy for server-runtime-client
  2. Implement top-level API methods as per develop spec
  3. Add support for paramaterized strings
  4. Add integration tests to validate envelope gets sent correctly

@AbhiPrasad
AbhiPrasad requested review from a team and mydeaMarch 17, 2025 17:10
@AbhiPrasadAbhiPrasad self-assigned this Mar 17, 2025
@AbhiPrasad
AbhiPrasad requested review from chargome and removed request for a teamMarch 17, 2025 17:10
@AbhiPrasadAbhiPrasad mentioned this pull request Mar 17, 2025
7 tasks
@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize% ChangeChange
⛔️ @sentry/browser (max: 23.44 KB)23.66 KB+2.22%+526 B 🔺
@sentry/browser - with treeshaking flags23.48 KB+2.36%+553 B 🔺
⛔️ @sentry/browser (incl. Tracing) (max: 36.62 KB)36.69 KB+1.34%+496 B 🔺
⛔️ @sentry/browser (incl. Tracing, Replay) (max: 73.44 KB)73.87 KB+0.65%+488 B 🔺
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags67.3 KB+0.75%+511 B 🔺
⛔️ @sentry/browser (incl. Tracing, Replay with Canvas) (max: 78.13 KB)78.5 KB+0.63%+503 B 🔺
@sentry/browser (incl. Tracing, Replay, Feedback)91.06 KB+0.55%+501 B 🔺
@sentry/browser (incl. Feedback)40.81 KB+1.28%+528 B 🔺
@sentry/browser (incl. sendFeedback)28.3 KB+1.87%+531 B 🔺
@sentry/browser (incl. FeedbackAsync)33.09 KB+1.6%+531 B 🔺
@sentry/react25.48 KB+2.05%+524 B 🔺
@sentry/react (incl. Tracing)38.63 KB+1.4%+546 B 🔺
@sentry/vue27.89 KB+1.79%+502 B 🔺
@sentry/vue (incl. Tracing)38.39 KB+1.29%+499 B 🔺
@sentry/svelte23.69 KB+2.2%+522 B 🔺
CDN Bundle24.8 KB+1.82%+453 B 🔺
CDN Bundle (incl. Tracing)36.7 KB+1.23%+454 B 🔺
CDN Bundle (incl. Tracing, Replay)71.7 KB+0.6%+435 B 🔺
CDN Bundle (incl. Tracing, Replay, Feedback)76.9 KB+0.6%+464 B 🔺
CDN Bundle - uncompressed72.48 KB+1.82%+1.29 KB 🔺
CDN Bundle (incl. Tracing) - uncompressed108.86 KB+1.21%+1.29 KB 🔺
CDN Bundle (incl. Tracing, Replay) - uncompressed220.12 KB+0.59%+1.29 KB 🔺
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed232.68 KB+0.56%+1.29 KB 🔺
@sentry/nextjs (client)39.79 KB+1.33%+534 B 🔺
@sentry/sveltekit (client)37.1 KB+1.3%+486 B 🔺
@sentry/node142.72 KB+0.31%+450 B 🔺
@sentry/node - without tracing96.12 KB+0.44%+426 B 🔺
@sentry/aws-serverless120.46 KB+0.34%+412 B 🔺

View base workflow run

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Please see #15717 as an example of how to do this without adding code to the client.

@AbhiPrasad

Copy link
Copy Markdown
ContributorAuthor

Closing this because of #15526 (comment)

@AbhiPrasad
AbhiPrasad deleted the abhi-logs-in-client branch March 24, 2025 19:20
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

@AbhiPrasad