Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
bdcb9e1
initial work on .log
colin-sentry Feb 14, 2025
4281cbe
improve a bit
colin-sentry Feb 14, 2025
1869d6f
linting, etc
colin-sentry Feb 18, 2025
4b89486
fix: Rename ourlog -> log
AbhiPrasad Feb 20, 2025
2fe0e1b
ref: Namespace logging methods in experiment obj
AbhiPrasad Feb 20, 2025
21b16e8
ref: Improve log creation logic and update option name
AbhiPrasad Feb 20, 2025
9ac58b1
allow for multiple logs to be flushed in the same envelope
AbhiPrasad Feb 20, 2025
8fc4ae2
feat: Add release and environment to logs
AbhiPrasad Feb 20, 2025
f3adcde
ref: Change log buffer max length from 100 -> 25
AbhiPrasad Feb 20, 2025
bbc170d
feat: Send severityNumber
AbhiPrasad Feb 20, 2025
bab4c6e
ref: re-org functions and exports
AbhiPrasad Feb 20, 2025
f750d08
feat: Add log function
AbhiPrasad Feb 20, 2025
7218377
fix: use correct severity number for log
AbhiPrasad Feb 20, 2025
3e936c9
chore: Bump size-limit
AbhiPrasad Feb 24, 2025
b702cf0
chore: size limit entries that were missed
AbhiPrasad Feb 24, 2025
301a1ca
Update packages/core/src/log.ts
k-fish Mar 4, 2025
6f3560c
Use '.' for param so it renders more nicely in the log attribute tree…
k-fish Mar 4, 2025
6215ad9
json the parameters
colin-sentry Mar 4, 2025
9048164
align attributes with what was agreed
AbhiPrasad Mar 4, 2025
4e0d9bd
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 4, 2025
a8673b7
fix: Duplicate export identifier
AbhiPrasad Mar 4, 2025
e9fa3bc
ref: introduce format function and restructure exports
AbhiPrasad Mar 4, 2025
2c3db7d
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 5, 2025
3ffc54b
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 5, 2025
cdf8bc5
chore: bump size-limit
AbhiPrasad Mar 5, 2025
0e77407
fix: ParamaterizeString typing to allow more than string values
AbhiPrasad Mar 6, 2025
4d0678a
feat: Add parent_span_id to outgoing logs
AbhiPrasad Mar 6, 2025
7b83155
feat: Export logging methods for node/server-side SDKs
AbhiPrasad Mar 6, 2025
6994781
fix: Set parent_span_id properly
AbhiPrasad Mar 6, 2025
8602f81
fix: Remove unneeded import
AbhiPrasad Mar 6, 2025
7d22aa2
chore: bump size-limit
AbhiPrasad Mar 6, 2025
d7e3479
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 6, 2025
bbb1698
Merge branch 'develop' into colin/log-api
colin-sentry Mar 11, 2025
c4b6d2d
feat(buffer): Add beforeSendLogs for sampling decisions
colin-sentry Mar 13, 2025
1da9a7f
clean up
colin-sentry Mar 13, 2025
5b66ccf
remove old comment
colin-sentry Mar 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions .size-limit.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,14 +8,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24 KB',
limit: '25 KB',
},
{
name: '@sentry/browser - with treeshaking flags',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24.1 KB',
limit: '24.5 KB',
modifyWebpackConfig: function (config) {
const webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin');
Expand All@@ -40,14 +40,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration'),
gzip: true,
limit: '37.5 KB',
limit: '38 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay)',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration'),
gzip: true,
limit: '75.2 KB',
limit: '77 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay) - with treeshaking flags',
Expand DownExpand Up@@ -79,7 +79,7 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration', 'replayCanvasIntegration'),
gzip: true,
limit: '80 KB',
limit: '82 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay, Feedback)',
Expand All@@ -100,14 +100,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'sendFeedback'),
gzip: true,
limit: '29 KB',
limit: '30 KB',
},
{
name: '@sentry/browser (incl. FeedbackAsync)',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'feedbackAsyncIntegration'),
gzip: true,
limit: '34 KB',
limit: '34.5 KB',
},
// React SDK (ESM)
{
Expand DownExpand Up@@ -210,7 +210,7 @@ module.exports = [
import: createImport('init'),
ignore: ['next/router', 'next/constants'],
gzip: true,
limit: '41 KB',
limit: '43 KB',
},
// SvelteKit SDK (ESM)
{
Expand All@@ -219,7 +219,7 @@ module.exports = [
import: createImport('init'),
ignore: ['$app/stores'],
gzip: true,
limit: '38 KB',
limit: '39 KB',
},
// Node SDK (ESM)
{
Expand Down
1 change: 1 addition & 0 deletions packages/astro/src/index.server.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -127,6 +127,7 @@ export {
withScope,
zodErrorsIntegration,
profiler,
_experiment_log,
} from '@sentry/node';

export { init } from './server/sdk';
Expand Down
1 change: 1 addition & 0 deletions packages/aws-serverless/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -113,6 +113,7 @@ export {
profiler,
amqplibIntegration,
vercelAIIntegration,
_experiment_log,
} from '@sentry/node';

export {
Expand Down
1 change: 1 addition & 0 deletions packages/browser/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,7 @@ export {
extraErrorDataIntegration,
rewriteFramesIntegration,
captureFeedback,
_experiment_log,
} from '@sentry/core';

export { replayIntegration, getReplay } from '@sentry-internal/replay';
Expand Down
1 change: 1 addition & 0 deletions packages/bun/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -132,6 +132,7 @@ export {
profiler,
amqplibIntegration,
vercelAIIntegration,
_experiment_log,
} from '@sentry/node';

export {
Expand Down
1 change: 1 addition & 0 deletions packages/cloudflare/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -85,6 +85,7 @@ export {
spanToTraceHeader,
spanToBaggageHeader,
updateSpanName,
_experiment_log,
} from '@sentry/core';

export { withSentry } from './handler';
Expand Down
116 changes: 116 additions & 0 deletions packages/core/src/exports.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import { getClient, getCurrentScope, getIsolationScope, withIsolationScope } from './currentScopes';
import { DEBUG_BUILD } from './debug-build';
import { captureLog, sendLog } from './log';
import type { CaptureContext } from './scope';
import { closeSession, makeSession, updateSession } from './session';
import type {
Expand All@@ -22,6 +23,7 @@ import { logger } from './utils-hoist/logger';
import { uuid4 } from './utils-hoist/misc';
import { timestampInSeconds } from './utils-hoist/time';
import { GLOBAL_OBJ } from './utils-hoist/worldwide';
import { parameterizeStringTemplate } from './utils/parameterize';
import type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';
import { parseEventHintOrCaptureContext } from './utils/prepareEvent';

Expand DownExpand Up@@ -334,3 +336,117 @@ export function captureSession(end: boolean = false): void {
// only send the update
_sendSessionUpdate();
}

/**
* A namespace for experimental logging functions.
*
* @experimental Will be removed in future versions. Use with caution.
*/
export const _experiment_log = {
/**
* A utility to record a log with level 'TRACE' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { trace, fmt } = Sentry._experiment_log;
* trace(fmt`user ${username} just bought ${item}!`);
* ```
*/
trace: sendLog('trace'),
/**
* A utility to record a log with level 'DEBUG' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { debug, fmt } = Sentry._experiment_log;
* debug(fmt`user ${username} just bought ${item}!`);
* ```
*/
debug: sendLog('debug'),
/**
* A utility to record a log with level 'INFO' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { info, fmt } = Sentry._experiment_log;
* info(fmt`user ${username} just bought ${item}!`);
* ```
*/
info: sendLog('info'),
/**
* A utility to record a log with level 'INFO' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { log, fmt } = Sentry._experiment_log;
* log(fmt`user ${username} just bought ${item}!`);
* ```
*/
log: sendLog('info', 10),
/**
* A utility to record a log with level 'ERROR' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { error, fmt } = Sentry._experiment_log;
* error(fmt`user ${username} just bought ${item}!`);
* ```
*/
error: sendLog('error'),
/**
* A utility to record a log with level 'WARN' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { warn, fmt } = Sentry._experiment_log;
* warn(fmt`user ${username} just bought ${item}!`);
* ```
*/
warn: sendLog('warn'),
/**
* A utility to record a log with level 'FATAL' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { fatal, fmt } = Sentry._experiment_log;
* fatal(fmt`user ${username} just bought ${item}!`);
* ```
*/
fatal: sendLog('fatal'),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the side-effect y'all are probably looking for.


/**
* Tagged template function which returns parameterized representation of the message
*
* @example
* ```js
* Sentry._experiment_log.fmt`This is a log statement with ${x} and ${y} params`
* ```
*/
fmt: parameterizeStringTemplate,

/**
* A flexible utility to record a log with a custom level and send it to sentry.
*
* You can optionally pass in custom attributes and a custom severity number to be attached to the log.
*
* @example
* ```js
* Sentry._experiment_log.emit({ level: 'info', message: Sentry._experiment_log.fmt`user ${username }just bought ${item}`, attributes: { extra: 123 } })
* ```
*/
emit: captureLog,
};
1 change: 1 addition & 0 deletions packages/core/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -29,6 +29,7 @@ export {
endSession,
captureSession,
addEventProcessor,
_experiment_log,
} from './exports';
export {
getCurrentScope,
Expand Down
Loading
, '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(logs): Add experimental user-callable logging methods by colin-sentry · Pull Request #15442 · getsentry/sentry-javascript · GitHub
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
bdcb9e1
initial work on .log
colin-sentry Feb 14, 2025
4281cbe
improve a bit
colin-sentry Feb 14, 2025
1869d6f
linting, etc
colin-sentry Feb 18, 2025
4b89486
fix: Rename ourlog -> log
AbhiPrasad Feb 20, 2025
2fe0e1b
ref: Namespace logging methods in experiment obj
AbhiPrasad Feb 20, 2025
21b16e8
ref: Improve log creation logic and update option name
AbhiPrasad Feb 20, 2025
9ac58b1
allow for multiple logs to be flushed in the same envelope
AbhiPrasad Feb 20, 2025
8fc4ae2
feat: Add release and environment to logs
AbhiPrasad Feb 20, 2025
f3adcde
ref: Change log buffer max length from 100 -> 25
AbhiPrasad Feb 20, 2025
bbc170d
feat: Send severityNumber
AbhiPrasad Feb 20, 2025
bab4c6e
ref: re-org functions and exports
AbhiPrasad Feb 20, 2025
f750d08
feat: Add log function
AbhiPrasad Feb 20, 2025
7218377
fix: use correct severity number for log
AbhiPrasad Feb 20, 2025
3e936c9
chore: Bump size-limit
AbhiPrasad Feb 24, 2025
b702cf0
chore: size limit entries that were missed
AbhiPrasad Feb 24, 2025
301a1ca
Update packages/core/src/log.ts
k-fish Mar 4, 2025
6f3560c
Use '.' for param so it renders more nicely in the log attribute tree…
k-fish Mar 4, 2025
6215ad9
json the parameters
colin-sentry Mar 4, 2025
9048164
align attributes with what was agreed
AbhiPrasad Mar 4, 2025
4e0d9bd
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 4, 2025
a8673b7
fix: Duplicate export identifier
AbhiPrasad Mar 4, 2025
e9fa3bc
ref: introduce format function and restructure exports
AbhiPrasad Mar 4, 2025
2c3db7d
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 5, 2025
3ffc54b
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 5, 2025
cdf8bc5
chore: bump size-limit
AbhiPrasad Mar 5, 2025
0e77407
fix: ParamaterizeString typing to allow more than string values
AbhiPrasad Mar 6, 2025
4d0678a
feat: Add parent_span_id to outgoing logs
AbhiPrasad Mar 6, 2025
7b83155
feat: Export logging methods for node/server-side SDKs
AbhiPrasad Mar 6, 2025
6994781
fix: Set parent_span_id properly
AbhiPrasad Mar 6, 2025
8602f81
fix: Remove unneeded import
AbhiPrasad Mar 6, 2025
7d22aa2
chore: bump size-limit
AbhiPrasad Mar 6, 2025
d7e3479
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 6, 2025
bbb1698
Merge branch 'develop' into colin/log-api
colin-sentry Mar 11, 2025
c4b6d2d
feat(buffer): Add beforeSendLogs for sampling decisions
colin-sentry Mar 13, 2025
1da9a7f
clean up
colin-sentry Mar 13, 2025
5b66ccf
remove old comment
colin-sentry Mar 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions .size-limit.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,14 +8,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24 KB',
limit: '25 KB',
},
{
name: '@sentry/browser - with treeshaking flags',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24.1 KB',
limit: '24.5 KB',
modifyWebpackConfig: function (config) {
const webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin');
Expand All@@ -40,14 +40,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration'),
gzip: true,
limit: '37.5 KB',
limit: '38 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay)',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration'),
gzip: true,
limit: '75.2 KB',
limit: '77 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay) - with treeshaking flags',
Expand DownExpand Up@@ -79,7 +79,7 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration', 'replayCanvasIntegration'),
gzip: true,
limit: '80 KB',
limit: '82 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay, Feedback)',
Expand All@@ -100,14 +100,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'sendFeedback'),
gzip: true,
limit: '29 KB',
limit: '30 KB',
},
{
name: '@sentry/browser (incl. FeedbackAsync)',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'feedbackAsyncIntegration'),
gzip: true,
limit: '34 KB',
limit: '34.5 KB',
},
// React SDK (ESM)
{
Expand DownExpand Up@@ -210,7 +210,7 @@ module.exports = [
import: createImport('init'),
ignore: ['next/router', 'next/constants'],
gzip: true,
limit: '41 KB',
limit: '43 KB',
},
// SvelteKit SDK (ESM)
{
Expand All@@ -219,7 +219,7 @@ module.exports = [
import: createImport('init'),
ignore: ['$app/stores'],
gzip: true,
limit: '38 KB',
limit: '39 KB',
},
// Node SDK (ESM)
{
Expand Down
1 change: 1 addition & 0 deletions packages/astro/src/index.server.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -127,6 +127,7 @@ export {
withScope,
zodErrorsIntegration,
profiler,
_experiment_log,
} from '@sentry/node';

export { init } from './server/sdk';
Expand Down
1 change: 1 addition & 0 deletions packages/aws-serverless/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -113,6 +113,7 @@ export {
profiler,
amqplibIntegration,
vercelAIIntegration,
_experiment_log,
} from '@sentry/node';

export {
Expand Down
1 change: 1 addition & 0 deletions packages/browser/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,7 @@ export {
extraErrorDataIntegration,
rewriteFramesIntegration,
captureFeedback,
_experiment_log,
} from '@sentry/core';

export { replayIntegration, getReplay } from '@sentry-internal/replay';
Expand Down
1 change: 1 addition & 0 deletions packages/bun/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -132,6 +132,7 @@ export {
profiler,
amqplibIntegration,
vercelAIIntegration,
_experiment_log,
} from '@sentry/node';

export {
Expand Down
1 change: 1 addition & 0 deletions packages/cloudflare/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -85,6 +85,7 @@ export {
spanToTraceHeader,
spanToBaggageHeader,
updateSpanName,
_experiment_log,
} from '@sentry/core';

export { withSentry } from './handler';
Expand Down
116 changes: 116 additions & 0 deletions packages/core/src/exports.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import { getClient, getCurrentScope, getIsolationScope, withIsolationScope } from './currentScopes';
import { DEBUG_BUILD } from './debug-build';
import { captureLog, sendLog } from './log';
import type { CaptureContext } from './scope';
import { closeSession, makeSession, updateSession } from './session';
import type {
Expand All@@ -22,6 +23,7 @@ import { logger } from './utils-hoist/logger';
import { uuid4 } from './utils-hoist/misc';
import { timestampInSeconds } from './utils-hoist/time';
import { GLOBAL_OBJ } from './utils-hoist/worldwide';
import { parameterizeStringTemplate } from './utils/parameterize';
import type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';
import { parseEventHintOrCaptureContext } from './utils/prepareEvent';

Expand DownExpand Up@@ -334,3 +336,117 @@ export function captureSession(end: boolean = false): void {
// only send the update
_sendSessionUpdate();
}

/**
* A namespace for experimental logging functions.
*
* @experimental Will be removed in future versions. Use with caution.
*/
export const _experiment_log = {
/**
* A utility to record a log with level 'TRACE' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { trace, fmt } = Sentry._experiment_log;
* trace(fmt`user ${username} just bought ${item}!`);
* ```
*/
trace: sendLog('trace'),
/**
* A utility to record a log with level 'DEBUG' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { debug, fmt } = Sentry._experiment_log;
* debug(fmt`user ${username} just bought ${item}!`);
* ```
*/
debug: sendLog('debug'),
/**
* A utility to record a log with level 'INFO' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { info, fmt } = Sentry._experiment_log;
* info(fmt`user ${username} just bought ${item}!`);
* ```
*/
info: sendLog('info'),
/**
* A utility to record a log with level 'INFO' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { log, fmt } = Sentry._experiment_log;
* log(fmt`user ${username} just bought ${item}!`);
* ```
*/
log: sendLog('info', 10),
/**
* A utility to record a log with level 'ERROR' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { error, fmt } = Sentry._experiment_log;
* error(fmt`user ${username} just bought ${item}!`);
* ```
*/
error: sendLog('error'),
/**
* A utility to record a log with level 'WARN' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { warn, fmt } = Sentry._experiment_log;
* warn(fmt`user ${username} just bought ${item}!`);
* ```
*/
warn: sendLog('warn'),
/**
* A utility to record a log with level 'FATAL' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { fatal, fmt } = Sentry._experiment_log;
* fatal(fmt`user ${username} just bought ${item}!`);
* ```
*/
fatal: sendLog('fatal'),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the side-effect y'all are probably looking for.


/**
* Tagged template function which returns parameterized representation of the message
*
* @example
* ```js
* Sentry._experiment_log.fmt`This is a log statement with ${x} and ${y} params`
* ```
*/
fmt: parameterizeStringTemplate,

/**
* A flexible utility to record a log with a custom level and send it to sentry.
*
* You can optionally pass in custom attributes and a custom severity number to be attached to the log.
*
* @example
* ```js
* Sentry._experiment_log.emit({ level: 'info', message: Sentry._experiment_log.fmt`user ${username }just bought ${item}`, attributes: { extra: 123 } })
* ```
*/
emit: captureLog,
};
1 change: 1 addition & 0 deletions packages/core/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -29,6 +29,7 @@ export {
endSession,
captureSession,
addEventProcessor,
_experiment_log,
} from './exports';
export {
getCurrentScope,
Expand Down
Loading
, '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(logs): Add experimental user-callable logging methods by colin-sentry · Pull Request #15442 · getsentry/sentry-javascript · GitHub
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
bdcb9e1
initial work on .log
colin-sentry Feb 14, 2025
4281cbe
improve a bit
colin-sentry Feb 14, 2025
1869d6f
linting, etc
colin-sentry Feb 18, 2025
4b89486
fix: Rename ourlog -> log
AbhiPrasad Feb 20, 2025
2fe0e1b
ref: Namespace logging methods in experiment obj
AbhiPrasad Feb 20, 2025
21b16e8
ref: Improve log creation logic and update option name
AbhiPrasad Feb 20, 2025
9ac58b1
allow for multiple logs to be flushed in the same envelope
AbhiPrasad Feb 20, 2025
8fc4ae2
feat: Add release and environment to logs
AbhiPrasad Feb 20, 2025
f3adcde
ref: Change log buffer max length from 100 -> 25
AbhiPrasad Feb 20, 2025
bbc170d
feat: Send severityNumber
AbhiPrasad Feb 20, 2025
bab4c6e
ref: re-org functions and exports
AbhiPrasad Feb 20, 2025
f750d08
feat: Add log function
AbhiPrasad Feb 20, 2025
7218377
fix: use correct severity number for log
AbhiPrasad Feb 20, 2025
3e936c9
chore: Bump size-limit
AbhiPrasad Feb 24, 2025
b702cf0
chore: size limit entries that were missed
AbhiPrasad Feb 24, 2025
301a1ca
Update packages/core/src/log.ts
k-fish Mar 4, 2025
6f3560c
Use '.' for param so it renders more nicely in the log attribute tree…
k-fish Mar 4, 2025
6215ad9
json the parameters
colin-sentry Mar 4, 2025
9048164
align attributes with what was agreed
AbhiPrasad Mar 4, 2025
4e0d9bd
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 4, 2025
a8673b7
fix: Duplicate export identifier
AbhiPrasad Mar 4, 2025
e9fa3bc
ref: introduce format function and restructure exports
AbhiPrasad Mar 4, 2025
2c3db7d
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 5, 2025
3ffc54b
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 5, 2025
cdf8bc5
chore: bump size-limit
AbhiPrasad Mar 5, 2025
0e77407
fix: ParamaterizeString typing to allow more than string values
AbhiPrasad Mar 6, 2025
4d0678a
feat: Add parent_span_id to outgoing logs
AbhiPrasad Mar 6, 2025
7b83155
feat: Export logging methods for node/server-side SDKs
AbhiPrasad Mar 6, 2025
6994781
fix: Set parent_span_id properly
AbhiPrasad Mar 6, 2025
8602f81
fix: Remove unneeded import
AbhiPrasad Mar 6, 2025
7d22aa2
chore: bump size-limit
AbhiPrasad Mar 6, 2025
d7e3479
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 6, 2025
bbb1698
Merge branch 'develop' into colin/log-api
colin-sentry Mar 11, 2025
c4b6d2d
feat(buffer): Add beforeSendLogs for sampling decisions
colin-sentry Mar 13, 2025
1da9a7f
clean up
colin-sentry Mar 13, 2025
5b66ccf
remove old comment
colin-sentry Mar 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions .size-limit.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,14 +8,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24 KB',
limit: '25 KB',
},
{
name: '@sentry/browser - with treeshaking flags',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24.1 KB',
limit: '24.5 KB',
modifyWebpackConfig: function (config) {
const webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin');
Expand All@@ -40,14 +40,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration'),
gzip: true,
limit: '37.5 KB',
limit: '38 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay)',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration'),
gzip: true,
limit: '75.2 KB',
limit: '77 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay) - with treeshaking flags',
Expand DownExpand Up@@ -79,7 +79,7 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration', 'replayCanvasIntegration'),
gzip: true,
limit: '80 KB',
limit: '82 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay, Feedback)',
Expand All@@ -100,14 +100,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'sendFeedback'),
gzip: true,
limit: '29 KB',
limit: '30 KB',
},
{
name: '@sentry/browser (incl. FeedbackAsync)',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'feedbackAsyncIntegration'),
gzip: true,
limit: '34 KB',
limit: '34.5 KB',
},
// React SDK (ESM)
{
Expand DownExpand Up@@ -210,7 +210,7 @@ module.exports = [
import: createImport('init'),
ignore: ['next/router', 'next/constants'],
gzip: true,
limit: '41 KB',
limit: '43 KB',
},
// SvelteKit SDK (ESM)
{
Expand All@@ -219,7 +219,7 @@ module.exports = [
import: createImport('init'),
ignore: ['$app/stores'],
gzip: true,
limit: '38 KB',
limit: '39 KB',
},
// Node SDK (ESM)
{
Expand Down
1 change: 1 addition & 0 deletions packages/astro/src/index.server.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -127,6 +127,7 @@ export {
withScope,
zodErrorsIntegration,
profiler,
_experiment_log,
} from '@sentry/node';

export { init } from './server/sdk';
Expand Down
1 change: 1 addition & 0 deletions packages/aws-serverless/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -113,6 +113,7 @@ export {
profiler,
amqplibIntegration,
vercelAIIntegration,
_experiment_log,
} from '@sentry/node';

export {
Expand Down
1 change: 1 addition & 0 deletions packages/browser/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,7 @@ export {
extraErrorDataIntegration,
rewriteFramesIntegration,
captureFeedback,
_experiment_log,
} from '@sentry/core';

export { replayIntegration, getReplay } from '@sentry-internal/replay';
Expand Down
1 change: 1 addition & 0 deletions packages/bun/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -132,6 +132,7 @@ export {
profiler,
amqplibIntegration,
vercelAIIntegration,
_experiment_log,
} from '@sentry/node';

export {
Expand Down
1 change: 1 addition & 0 deletions packages/cloudflare/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -85,6 +85,7 @@ export {
spanToTraceHeader,
spanToBaggageHeader,
updateSpanName,
_experiment_log,
} from '@sentry/core';

export { withSentry } from './handler';
Expand Down
116 changes: 116 additions & 0 deletions packages/core/src/exports.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import { getClient, getCurrentScope, getIsolationScope, withIsolationScope } from './currentScopes';
import { DEBUG_BUILD } from './debug-build';
import { captureLog, sendLog } from './log';
import type { CaptureContext } from './scope';
import { closeSession, makeSession, updateSession } from './session';
import type {
Expand All@@ -22,6 +23,7 @@ import { logger } from './utils-hoist/logger';
import { uuid4 } from './utils-hoist/misc';
import { timestampInSeconds } from './utils-hoist/time';
import { GLOBAL_OBJ } from './utils-hoist/worldwide';
import { parameterizeStringTemplate } from './utils/parameterize';
import type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';
import { parseEventHintOrCaptureContext } from './utils/prepareEvent';

Expand DownExpand Up@@ -334,3 +336,117 @@ export function captureSession(end: boolean = false): void {
// only send the update
_sendSessionUpdate();
}

/**
* A namespace for experimental logging functions.
*
* @experimental Will be removed in future versions. Use with caution.
*/
export const _experiment_log = {
/**
* A utility to record a log with level 'TRACE' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { trace, fmt } = Sentry._experiment_log;
* trace(fmt`user ${username} just bought ${item}!`);
* ```
*/
trace: sendLog('trace'),
/**
* A utility to record a log with level 'DEBUG' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { debug, fmt } = Sentry._experiment_log;
* debug(fmt`user ${username} just bought ${item}!`);
* ```
*/
debug: sendLog('debug'),
/**
* A utility to record a log with level 'INFO' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { info, fmt } = Sentry._experiment_log;
* info(fmt`user ${username} just bought ${item}!`);
* ```
*/
info: sendLog('info'),
/**
* A utility to record a log with level 'INFO' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { log, fmt } = Sentry._experiment_log;
* log(fmt`user ${username} just bought ${item}!`);
* ```
*/
log: sendLog('info', 10),
/**
* A utility to record a log with level 'ERROR' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { error, fmt } = Sentry._experiment_log;
* error(fmt`user ${username} just bought ${item}!`);
* ```
*/
error: sendLog('error'),
/**
* A utility to record a log with level 'WARN' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { warn, fmt } = Sentry._experiment_log;
* warn(fmt`user ${username} just bought ${item}!`);
* ```
*/
warn: sendLog('warn'),
/**
* A utility to record a log with level 'FATAL' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { fatal, fmt } = Sentry._experiment_log;
* fatal(fmt`user ${username} just bought ${item}!`);
* ```
*/
fatal: sendLog('fatal'),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the side-effect y'all are probably looking for.


/**
* Tagged template function which returns parameterized representation of the message
*
* @example
* ```js
* Sentry._experiment_log.fmt`This is a log statement with ${x} and ${y} params`
* ```
*/
fmt: parameterizeStringTemplate,

/**
* A flexible utility to record a log with a custom level and send it to sentry.
*
* You can optionally pass in custom attributes and a custom severity number to be attached to the log.
*
* @example
* ```js
* Sentry._experiment_log.emit({ level: 'info', message: Sentry._experiment_log.fmt`user ${username }just bought ${item}`, attributes: { extra: 123 } })
* ```
*/
emit: captureLog,
};
1 change: 1 addition & 0 deletions packages/core/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -29,6 +29,7 @@ export {
endSession,
captureSession,
addEventProcessor,
_experiment_log,
} from './exports';
export {
getCurrentScope,
Expand Down
Loading
, '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(logs): Add experimental user-callable logging methods by colin-sentry · Pull Request #15442 · getsentry/sentry-javascript · GitHub
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
bdcb9e1
initial work on .log
colin-sentry Feb 14, 2025
4281cbe
improve a bit
colin-sentry Feb 14, 2025
1869d6f
linting, etc
colin-sentry Feb 18, 2025
4b89486
fix: Rename ourlog -> log
AbhiPrasad Feb 20, 2025
2fe0e1b
ref: Namespace logging methods in experiment obj
AbhiPrasad Feb 20, 2025
21b16e8
ref: Improve log creation logic and update option name
AbhiPrasad Feb 20, 2025
9ac58b1
allow for multiple logs to be flushed in the same envelope
AbhiPrasad Feb 20, 2025
8fc4ae2
feat: Add release and environment to logs
AbhiPrasad Feb 20, 2025
f3adcde
ref: Change log buffer max length from 100 -> 25
AbhiPrasad Feb 20, 2025
bbc170d
feat: Send severityNumber
AbhiPrasad Feb 20, 2025
bab4c6e
ref: re-org functions and exports
AbhiPrasad Feb 20, 2025
f750d08
feat: Add log function
AbhiPrasad Feb 20, 2025
7218377
fix: use correct severity number for log
AbhiPrasad Feb 20, 2025
3e936c9
chore: Bump size-limit
AbhiPrasad Feb 24, 2025
b702cf0
chore: size limit entries that were missed
AbhiPrasad Feb 24, 2025
301a1ca
Update packages/core/src/log.ts
k-fish Mar 4, 2025
6f3560c
Use '.' for param so it renders more nicely in the log attribute tree…
k-fish Mar 4, 2025
6215ad9
json the parameters
colin-sentry Mar 4, 2025
9048164
align attributes with what was agreed
AbhiPrasad Mar 4, 2025
4e0d9bd
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 4, 2025
a8673b7
fix: Duplicate export identifier
AbhiPrasad Mar 4, 2025
e9fa3bc
ref: introduce format function and restructure exports
AbhiPrasad Mar 4, 2025
2c3db7d
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 5, 2025
3ffc54b
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 5, 2025
cdf8bc5
chore: bump size-limit
AbhiPrasad Mar 5, 2025
0e77407
fix: ParamaterizeString typing to allow more than string values
AbhiPrasad Mar 6, 2025
4d0678a
feat: Add parent_span_id to outgoing logs
AbhiPrasad Mar 6, 2025
7b83155
feat: Export logging methods for node/server-side SDKs
AbhiPrasad Mar 6, 2025
6994781
fix: Set parent_span_id properly
AbhiPrasad Mar 6, 2025
8602f81
fix: Remove unneeded import
AbhiPrasad Mar 6, 2025
7d22aa2
chore: bump size-limit
AbhiPrasad Mar 6, 2025
d7e3479
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 6, 2025
bbb1698
Merge branch 'develop' into colin/log-api
colin-sentry Mar 11, 2025
c4b6d2d
feat(buffer): Add beforeSendLogs for sampling decisions
colin-sentry Mar 13, 2025
1da9a7f
clean up
colin-sentry Mar 13, 2025
5b66ccf
remove old comment
colin-sentry Mar 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions .size-limit.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,14 +8,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24 KB',
limit: '25 KB',
},
{
name: '@sentry/browser - with treeshaking flags',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24.1 KB',
limit: '24.5 KB',
modifyWebpackConfig: function (config) {
const webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin');
Expand All@@ -40,14 +40,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration'),
gzip: true,
limit: '37.5 KB',
limit: '38 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay)',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration'),
gzip: true,
limit: '75.2 KB',
limit: '77 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay) - with treeshaking flags',
Expand DownExpand Up@@ -79,7 +79,7 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration', 'replayCanvasIntegration'),
gzip: true,
limit: '80 KB',
limit: '82 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay, Feedback)',
Expand All@@ -100,14 +100,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'sendFeedback'),
gzip: true,
limit: '29 KB',
limit: '30 KB',
},
{
name: '@sentry/browser (incl. FeedbackAsync)',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'feedbackAsyncIntegration'),
gzip: true,
limit: '34 KB',
limit: '34.5 KB',
},
// React SDK (ESM)
{
Expand DownExpand Up@@ -210,7 +210,7 @@ module.exports = [
import: createImport('init'),
ignore: ['next/router', 'next/constants'],
gzip: true,
limit: '41 KB',
limit: '43 KB',
},
// SvelteKit SDK (ESM)
{
Expand All@@ -219,7 +219,7 @@ module.exports = [
import: createImport('init'),
ignore: ['$app/stores'],
gzip: true,
limit: '38 KB',
limit: '39 KB',
},
// Node SDK (ESM)
{
Expand Down
1 change: 1 addition & 0 deletions packages/astro/src/index.server.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -127,6 +127,7 @@ export {
withScope,
zodErrorsIntegration,
profiler,
_experiment_log,
} from '@sentry/node';

export { init } from './server/sdk';
Expand Down
1 change: 1 addition & 0 deletions packages/aws-serverless/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -113,6 +113,7 @@ export {
profiler,
amqplibIntegration,
vercelAIIntegration,
_experiment_log,
} from '@sentry/node';

export {
Expand Down
1 change: 1 addition & 0 deletions packages/browser/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,7 @@ export {
extraErrorDataIntegration,
rewriteFramesIntegration,
captureFeedback,
_experiment_log,
} from '@sentry/core';

export { replayIntegration, getReplay } from '@sentry-internal/replay';
Expand Down
1 change: 1 addition & 0 deletions packages/bun/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -132,6 +132,7 @@ export {
profiler,
amqplibIntegration,
vercelAIIntegration,
_experiment_log,
} from '@sentry/node';

export {
Expand Down
1 change: 1 addition & 0 deletions packages/cloudflare/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -85,6 +85,7 @@ export {
spanToTraceHeader,
spanToBaggageHeader,
updateSpanName,
_experiment_log,
} from '@sentry/core';

export { withSentry } from './handler';
Expand Down
116 changes: 116 additions & 0 deletions packages/core/src/exports.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import { getClient, getCurrentScope, getIsolationScope, withIsolationScope } from './currentScopes';
import { DEBUG_BUILD } from './debug-build';
import { captureLog, sendLog } from './log';
import type { CaptureContext } from './scope';
import { closeSession, makeSession, updateSession } from './session';
import type {
Expand All@@ -22,6 +23,7 @@ import { logger } from './utils-hoist/logger';
import { uuid4 } from './utils-hoist/misc';
import { timestampInSeconds } from './utils-hoist/time';
import { GLOBAL_OBJ } from './utils-hoist/worldwide';
import { parameterizeStringTemplate } from './utils/parameterize';
import type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';
import { parseEventHintOrCaptureContext } from './utils/prepareEvent';

Expand DownExpand Up@@ -334,3 +336,117 @@ export function captureSession(end: boolean = false): void {
// only send the update
_sendSessionUpdate();
}

/**
* A namespace for experimental logging functions.
*
* @experimental Will be removed in future versions. Use with caution.
*/
export const _experiment_log = {
/**
* A utility to record a log with level 'TRACE' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { trace, fmt } = Sentry._experiment_log;
* trace(fmt`user ${username} just bought ${item}!`);
* ```
*/
trace: sendLog('trace'),
/**
* A utility to record a log with level 'DEBUG' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { debug, fmt } = Sentry._experiment_log;
* debug(fmt`user ${username} just bought ${item}!`);
* ```
*/
debug: sendLog('debug'),
/**
* A utility to record a log with level 'INFO' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { info, fmt } = Sentry._experiment_log;
* info(fmt`user ${username} just bought ${item}!`);
* ```
*/
info: sendLog('info'),
/**
* A utility to record a log with level 'INFO' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { log, fmt } = Sentry._experiment_log;
* log(fmt`user ${username} just bought ${item}!`);
* ```
*/
log: sendLog('info', 10),
/**
* A utility to record a log with level 'ERROR' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { error, fmt } = Sentry._experiment_log;
* error(fmt`user ${username} just bought ${item}!`);
* ```
*/
error: sendLog('error'),
/**
* A utility to record a log with level 'WARN' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { warn, fmt } = Sentry._experiment_log;
* warn(fmt`user ${username} just bought ${item}!`);
* ```
*/
warn: sendLog('warn'),
/**
* A utility to record a log with level 'FATAL' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { fatal, fmt } = Sentry._experiment_log;
* fatal(fmt`user ${username} just bought ${item}!`);
* ```
*/
fatal: sendLog('fatal'),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the side-effect y'all are probably looking for.


/**
* Tagged template function which returns parameterized representation of the message
*
* @example
* ```js
* Sentry._experiment_log.fmt`This is a log statement with ${x} and ${y} params`
* ```
*/
fmt: parameterizeStringTemplate,

/**
* A flexible utility to record a log with a custom level and send it to sentry.
*
* You can optionally pass in custom attributes and a custom severity number to be attached to the log.
*
* @example
* ```js
* Sentry._experiment_log.emit({ level: 'info', message: Sentry._experiment_log.fmt`user ${username }just bought ${item}`, attributes: { extra: 123 } })
* ```
*/
emit: captureLog,
};
1 change: 1 addition & 0 deletions packages/core/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -29,6 +29,7 @@ export {
endSession,
captureSession,
addEventProcessor,
_experiment_log,
} from './exports';
export {
getCurrentScope,
Expand Down
Loading
, '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(logs): Add experimental user-callable logging methods by colin-sentry · Pull Request #15442 · getsentry/sentry-javascript · GitHub
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
bdcb9e1
initial work on .log
colin-sentry Feb 14, 2025
4281cbe
improve a bit
colin-sentry Feb 14, 2025
1869d6f
linting, etc
colin-sentry Feb 18, 2025
4b89486
fix: Rename ourlog -> log
AbhiPrasad Feb 20, 2025
2fe0e1b
ref: Namespace logging methods in experiment obj
AbhiPrasad Feb 20, 2025
21b16e8
ref: Improve log creation logic and update option name
AbhiPrasad Feb 20, 2025
9ac58b1
allow for multiple logs to be flushed in the same envelope
AbhiPrasad Feb 20, 2025
8fc4ae2
feat: Add release and environment to logs
AbhiPrasad Feb 20, 2025
f3adcde
ref: Change log buffer max length from 100 -> 25
AbhiPrasad Feb 20, 2025
bbc170d
feat: Send severityNumber
AbhiPrasad Feb 20, 2025
bab4c6e
ref: re-org functions and exports
AbhiPrasad Feb 20, 2025
f750d08
feat: Add log function
AbhiPrasad Feb 20, 2025
7218377
fix: use correct severity number for log
AbhiPrasad Feb 20, 2025
3e936c9
chore: Bump size-limit
AbhiPrasad Feb 24, 2025
b702cf0
chore: size limit entries that were missed
AbhiPrasad Feb 24, 2025
301a1ca
Update packages/core/src/log.ts
k-fish Mar 4, 2025
6f3560c
Use '.' for param so it renders more nicely in the log attribute tree…
k-fish Mar 4, 2025
6215ad9
json the parameters
colin-sentry Mar 4, 2025
9048164
align attributes with what was agreed
AbhiPrasad Mar 4, 2025
4e0d9bd
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 4, 2025
a8673b7
fix: Duplicate export identifier
AbhiPrasad Mar 4, 2025
e9fa3bc
ref: introduce format function and restructure exports
AbhiPrasad Mar 4, 2025
2c3db7d
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 5, 2025
3ffc54b
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 5, 2025
cdf8bc5
chore: bump size-limit
AbhiPrasad Mar 5, 2025
0e77407
fix: ParamaterizeString typing to allow more than string values
AbhiPrasad Mar 6, 2025
4d0678a
feat: Add parent_span_id to outgoing logs
AbhiPrasad Mar 6, 2025
7b83155
feat: Export logging methods for node/server-side SDKs
AbhiPrasad Mar 6, 2025
6994781
fix: Set parent_span_id properly
AbhiPrasad Mar 6, 2025
8602f81
fix: Remove unneeded import
AbhiPrasad Mar 6, 2025
7d22aa2
chore: bump size-limit
AbhiPrasad Mar 6, 2025
d7e3479
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 6, 2025
bbb1698
Merge branch 'develop' into colin/log-api
colin-sentry Mar 11, 2025
c4b6d2d
feat(buffer): Add beforeSendLogs for sampling decisions
colin-sentry Mar 13, 2025
1da9a7f
clean up
colin-sentry Mar 13, 2025
5b66ccf
remove old comment
colin-sentry Mar 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions .size-limit.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,14 +8,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24 KB',
limit: '25 KB',
},
{
name: '@sentry/browser - with treeshaking flags',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24.1 KB',
limit: '24.5 KB',
modifyWebpackConfig: function (config) {
const webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin');
Expand All@@ -40,14 +40,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration'),
gzip: true,
limit: '37.5 KB',
limit: '38 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay)',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration'),
gzip: true,
limit: '75.2 KB',
limit: '77 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay) - with treeshaking flags',
Expand DownExpand Up@@ -79,7 +79,7 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration', 'replayCanvasIntegration'),
gzip: true,
limit: '80 KB',
limit: '82 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay, Feedback)',
Expand All@@ -100,14 +100,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'sendFeedback'),
gzip: true,
limit: '29 KB',
limit: '30 KB',
},
{
name: '@sentry/browser (incl. FeedbackAsync)',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'feedbackAsyncIntegration'),
gzip: true,
limit: '34 KB',
limit: '34.5 KB',
},
// React SDK (ESM)
{
Expand DownExpand Up@@ -210,7 +210,7 @@ module.exports = [
import: createImport('init'),
ignore: ['next/router', 'next/constants'],
gzip: true,
limit: '41 KB',
limit: '43 KB',
},
// SvelteKit SDK (ESM)
{
Expand All@@ -219,7 +219,7 @@ module.exports = [
import: createImport('init'),
ignore: ['$app/stores'],
gzip: true,
limit: '38 KB',
limit: '39 KB',
},
// Node SDK (ESM)
{
Expand Down
1 change: 1 addition & 0 deletions packages/astro/src/index.server.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -127,6 +127,7 @@ export {
withScope,
zodErrorsIntegration,
profiler,
_experiment_log,
} from '@sentry/node';

export { init } from './server/sdk';
Expand Down
1 change: 1 addition & 0 deletions packages/aws-serverless/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -113,6 +113,7 @@ export {
profiler,
amqplibIntegration,
vercelAIIntegration,
_experiment_log,
} from '@sentry/node';

export {
Expand Down
1 change: 1 addition & 0 deletions packages/browser/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,7 @@ export {
extraErrorDataIntegration,
rewriteFramesIntegration,
captureFeedback,
_experiment_log,
} from '@sentry/core';

export { replayIntegration, getReplay } from '@sentry-internal/replay';
Expand Down
1 change: 1 addition & 0 deletions packages/bun/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -132,6 +132,7 @@ export {
profiler,
amqplibIntegration,
vercelAIIntegration,
_experiment_log,
} from '@sentry/node';

export {
Expand Down
1 change: 1 addition & 0 deletions packages/cloudflare/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -85,6 +85,7 @@ export {
spanToTraceHeader,
spanToBaggageHeader,
updateSpanName,
_experiment_log,
} from '@sentry/core';

export { withSentry } from './handler';
Expand Down
116 changes: 116 additions & 0 deletions packages/core/src/exports.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import { getClient, getCurrentScope, getIsolationScope, withIsolationScope } from './currentScopes';
import { DEBUG_BUILD } from './debug-build';
import { captureLog, sendLog } from './log';
import type { CaptureContext } from './scope';
import { closeSession, makeSession, updateSession } from './session';
import type {
Expand All@@ -22,6 +23,7 @@ import { logger } from './utils-hoist/logger';
import { uuid4 } from './utils-hoist/misc';
import { timestampInSeconds } from './utils-hoist/time';
import { GLOBAL_OBJ } from './utils-hoist/worldwide';
import { parameterizeStringTemplate } from './utils/parameterize';
import type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';
import { parseEventHintOrCaptureContext } from './utils/prepareEvent';

Expand DownExpand Up@@ -334,3 +336,117 @@ export function captureSession(end: boolean = false): void {
// only send the update
_sendSessionUpdate();
}

/**
* A namespace for experimental logging functions.
*
* @experimental Will be removed in future versions. Use with caution.
*/
export const _experiment_log = {
/**
* A utility to record a log with level 'TRACE' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { trace, fmt } = Sentry._experiment_log;
* trace(fmt`user ${username} just bought ${item}!`);
* ```
*/
trace: sendLog('trace'),
/**
* A utility to record a log with level 'DEBUG' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { debug, fmt } = Sentry._experiment_log;
* debug(fmt`user ${username} just bought ${item}!`);
* ```
*/
debug: sendLog('debug'),
/**
* A utility to record a log with level 'INFO' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { info, fmt } = Sentry._experiment_log;
* info(fmt`user ${username} just bought ${item}!`);
* ```
*/
info: sendLog('info'),
/**
* A utility to record a log with level 'INFO' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { log, fmt } = Sentry._experiment_log;
* log(fmt`user ${username} just bought ${item}!`);
* ```
*/
log: sendLog('info', 10),
/**
* A utility to record a log with level 'ERROR' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { error, fmt } = Sentry._experiment_log;
* error(fmt`user ${username} just bought ${item}!`);
* ```
*/
error: sendLog('error'),
/**
* A utility to record a log with level 'WARN' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { warn, fmt } = Sentry._experiment_log;
* warn(fmt`user ${username} just bought ${item}!`);
* ```
*/
warn: sendLog('warn'),
/**
* A utility to record a log with level 'FATAL' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { fatal, fmt } = Sentry._experiment_log;
* fatal(fmt`user ${username} just bought ${item}!`);
* ```
*/
fatal: sendLog('fatal'),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the side-effect y'all are probably looking for.


/**
* Tagged template function which returns parameterized representation of the message
*
* @example
* ```js
* Sentry._experiment_log.fmt`This is a log statement with ${x} and ${y} params`
* ```
*/
fmt: parameterizeStringTemplate,

/**
* A flexible utility to record a log with a custom level and send it to sentry.
*
* You can optionally pass in custom attributes and a custom severity number to be attached to the log.
*
* @example
* ```js
* Sentry._experiment_log.emit({ level: 'info', message: Sentry._experiment_log.fmt`user ${username }just bought ${item}`, attributes: { extra: 123 } })
* ```
*/
emit: captureLog,
};
1 change: 1 addition & 0 deletions packages/core/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -29,6 +29,7 @@ export {
endSession,
captureSession,
addEventProcessor,
_experiment_log,
} from './exports';
export {
getCurrentScope,
Expand Down
Loading
, '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(logs): Add experimental user-callable logging methods by colin-sentry · Pull Request #15442 · getsentry/sentry-javascript · GitHub
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
bdcb9e1
initial work on .log
colin-sentry Feb 14, 2025
4281cbe
improve a bit
colin-sentry Feb 14, 2025
1869d6f
linting, etc
colin-sentry Feb 18, 2025
4b89486
fix: Rename ourlog -> log
AbhiPrasad Feb 20, 2025
2fe0e1b
ref: Namespace logging methods in experiment obj
AbhiPrasad Feb 20, 2025
21b16e8
ref: Improve log creation logic and update option name
AbhiPrasad Feb 20, 2025
9ac58b1
allow for multiple logs to be flushed in the same envelope
AbhiPrasad Feb 20, 2025
8fc4ae2
feat: Add release and environment to logs
AbhiPrasad Feb 20, 2025
f3adcde
ref: Change log buffer max length from 100 -> 25
AbhiPrasad Feb 20, 2025
bbc170d
feat: Send severityNumber
AbhiPrasad Feb 20, 2025
bab4c6e
ref: re-org functions and exports
AbhiPrasad Feb 20, 2025
f750d08
feat: Add log function
AbhiPrasad Feb 20, 2025
7218377
fix: use correct severity number for log
AbhiPrasad Feb 20, 2025
3e936c9
chore: Bump size-limit
AbhiPrasad Feb 24, 2025
b702cf0
chore: size limit entries that were missed
AbhiPrasad Feb 24, 2025
301a1ca
Update packages/core/src/log.ts
k-fish Mar 4, 2025
6f3560c
Use '.' for param so it renders more nicely in the log attribute tree…
k-fish Mar 4, 2025
6215ad9
json the parameters
colin-sentry Mar 4, 2025
9048164
align attributes with what was agreed
AbhiPrasad Mar 4, 2025
4e0d9bd
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 4, 2025
a8673b7
fix: Duplicate export identifier
AbhiPrasad Mar 4, 2025
e9fa3bc
ref: introduce format function and restructure exports
AbhiPrasad Mar 4, 2025
2c3db7d
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 5, 2025
3ffc54b
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 5, 2025
cdf8bc5
chore: bump size-limit
AbhiPrasad Mar 5, 2025
0e77407
fix: ParamaterizeString typing to allow more than string values
AbhiPrasad Mar 6, 2025
4d0678a
feat: Add parent_span_id to outgoing logs
AbhiPrasad Mar 6, 2025
7b83155
feat: Export logging methods for node/server-side SDKs
AbhiPrasad Mar 6, 2025
6994781
fix: Set parent_span_id properly
AbhiPrasad Mar 6, 2025
8602f81
fix: Remove unneeded import
AbhiPrasad Mar 6, 2025
7d22aa2
chore: bump size-limit
AbhiPrasad Mar 6, 2025
d7e3479
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 6, 2025
bbb1698
Merge branch 'develop' into colin/log-api
colin-sentry Mar 11, 2025
c4b6d2d
feat(buffer): Add beforeSendLogs for sampling decisions
colin-sentry Mar 13, 2025
1da9a7f
clean up
colin-sentry Mar 13, 2025
5b66ccf
remove old comment
colin-sentry Mar 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions .size-limit.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,14 +8,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24 KB',
limit: '25 KB',
},
{
name: '@sentry/browser - with treeshaking flags',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24.1 KB',
limit: '24.5 KB',
modifyWebpackConfig: function (config) {
const webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin');
Expand All@@ -40,14 +40,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration'),
gzip: true,
limit: '37.5 KB',
limit: '38 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay)',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration'),
gzip: true,
limit: '75.2 KB',
limit: '77 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay) - with treeshaking flags',
Expand DownExpand Up@@ -79,7 +79,7 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration', 'replayCanvasIntegration'),
gzip: true,
limit: '80 KB',
limit: '82 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay, Feedback)',
Expand All@@ -100,14 +100,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'sendFeedback'),
gzip: true,
limit: '29 KB',
limit: '30 KB',
},
{
name: '@sentry/browser (incl. FeedbackAsync)',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'feedbackAsyncIntegration'),
gzip: true,
limit: '34 KB',
limit: '34.5 KB',
},
// React SDK (ESM)
{
Expand DownExpand Up@@ -210,7 +210,7 @@ module.exports = [
import: createImport('init'),
ignore: ['next/router', 'next/constants'],
gzip: true,
limit: '41 KB',
limit: '43 KB',
},
// SvelteKit SDK (ESM)
{
Expand All@@ -219,7 +219,7 @@ module.exports = [
import: createImport('init'),
ignore: ['$app/stores'],
gzip: true,
limit: '38 KB',
limit: '39 KB',
},
// Node SDK (ESM)
{
Expand Down
1 change: 1 addition & 0 deletions packages/astro/src/index.server.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -127,6 +127,7 @@ export {
withScope,
zodErrorsIntegration,
profiler,
_experiment_log,
} from '@sentry/node';

export { init } from './server/sdk';
Expand Down
1 change: 1 addition & 0 deletions packages/aws-serverless/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -113,6 +113,7 @@ export {
profiler,
amqplibIntegration,
vercelAIIntegration,
_experiment_log,
} from '@sentry/node';

export {
Expand Down
1 change: 1 addition & 0 deletions packages/browser/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,7 @@ export {
extraErrorDataIntegration,
rewriteFramesIntegration,
captureFeedback,
_experiment_log,
} from '@sentry/core';

export { replayIntegration, getReplay } from '@sentry-internal/replay';
Expand Down
1 change: 1 addition & 0 deletions packages/bun/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -132,6 +132,7 @@ export {
profiler,
amqplibIntegration,
vercelAIIntegration,
_experiment_log,
} from '@sentry/node';

export {
Expand Down
1 change: 1 addition & 0 deletions packages/cloudflare/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -85,6 +85,7 @@ export {
spanToTraceHeader,
spanToBaggageHeader,
updateSpanName,
_experiment_log,
} from '@sentry/core';

export { withSentry } from './handler';
Expand Down
116 changes: 116 additions & 0 deletions packages/core/src/exports.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import { getClient, getCurrentScope, getIsolationScope, withIsolationScope } from './currentScopes';
import { DEBUG_BUILD } from './debug-build';
import { captureLog, sendLog } from './log';
import type { CaptureContext } from './scope';
import { closeSession, makeSession, updateSession } from './session';
import type {
Expand All@@ -22,6 +23,7 @@ import { logger } from './utils-hoist/logger';
import { uuid4 } from './utils-hoist/misc';
import { timestampInSeconds } from './utils-hoist/time';
import { GLOBAL_OBJ } from './utils-hoist/worldwide';
import { parameterizeStringTemplate } from './utils/parameterize';
import type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';
import { parseEventHintOrCaptureContext } from './utils/prepareEvent';

Expand DownExpand Up@@ -334,3 +336,117 @@ export function captureSession(end: boolean = false): void {
// only send the update
_sendSessionUpdate();
}

/**
* A namespace for experimental logging functions.
*
* @experimental Will be removed in future versions. Use with caution.
*/
export const _experiment_log = {
/**
* A utility to record a log with level 'TRACE' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { trace, fmt } = Sentry._experiment_log;
* trace(fmt`user ${username} just bought ${item}!`);
* ```
*/
trace: sendLog('trace'),
/**
* A utility to record a log with level 'DEBUG' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { debug, fmt } = Sentry._experiment_log;
* debug(fmt`user ${username} just bought ${item}!`);
* ```
*/
debug: sendLog('debug'),
/**
* A utility to record a log with level 'INFO' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { info, fmt } = Sentry._experiment_log;
* info(fmt`user ${username} just bought ${item}!`);
* ```
*/
info: sendLog('info'),
/**
* A utility to record a log with level 'INFO' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { log, fmt } = Sentry._experiment_log;
* log(fmt`user ${username} just bought ${item}!`);
* ```
*/
log: sendLog('info', 10),
/**
* A utility to record a log with level 'ERROR' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { error, fmt } = Sentry._experiment_log;
* error(fmt`user ${username} just bought ${item}!`);
* ```
*/
error: sendLog('error'),
/**
* A utility to record a log with level 'WARN' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { warn, fmt } = Sentry._experiment_log;
* warn(fmt`user ${username} just bought ${item}!`);
* ```
*/
warn: sendLog('warn'),
/**
* A utility to record a log with level 'FATAL' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { fatal, fmt } = Sentry._experiment_log;
* fatal(fmt`user ${username} just bought ${item}!`);
* ```
*/
fatal: sendLog('fatal'),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the side-effect y'all are probably looking for.


/**
* Tagged template function which returns parameterized representation of the message
*
* @example
* ```js
* Sentry._experiment_log.fmt`This is a log statement with ${x} and ${y} params`
* ```
*/
fmt: parameterizeStringTemplate,

/**
* A flexible utility to record a log with a custom level and send it to sentry.
*
* You can optionally pass in custom attributes and a custom severity number to be attached to the log.
*
* @example
* ```js
* Sentry._experiment_log.emit({ level: 'info', message: Sentry._experiment_log.fmt`user ${username }just bought ${item}`, attributes: { extra: 123 } })
* ```
*/
emit: captureLog,
};
1 change: 1 addition & 0 deletions packages/core/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -29,6 +29,7 @@ export {
endSession,
captureSession,
addEventProcessor,
_experiment_log,
} from './exports';
export {
getCurrentScope,
Expand Down
Loading
, '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(logs): Add experimental user-callable logging methods by colin-sentry · Pull Request #15442 · getsentry/sentry-javascript · GitHub
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
bdcb9e1
initial work on .log
colin-sentry Feb 14, 2025
4281cbe
improve a bit
colin-sentry Feb 14, 2025
1869d6f
linting, etc
colin-sentry Feb 18, 2025
4b89486
fix: Rename ourlog -> log
AbhiPrasad Feb 20, 2025
2fe0e1b
ref: Namespace logging methods in experiment obj
AbhiPrasad Feb 20, 2025
21b16e8
ref: Improve log creation logic and update option name
AbhiPrasad Feb 20, 2025
9ac58b1
allow for multiple logs to be flushed in the same envelope
AbhiPrasad Feb 20, 2025
8fc4ae2
feat: Add release and environment to logs
AbhiPrasad Feb 20, 2025
f3adcde
ref: Change log buffer max length from 100 -> 25
AbhiPrasad Feb 20, 2025
bbc170d
feat: Send severityNumber
AbhiPrasad Feb 20, 2025
bab4c6e
ref: re-org functions and exports
AbhiPrasad Feb 20, 2025
f750d08
feat: Add log function
AbhiPrasad Feb 20, 2025
7218377
fix: use correct severity number for log
AbhiPrasad Feb 20, 2025
3e936c9
chore: Bump size-limit
AbhiPrasad Feb 24, 2025
b702cf0
chore: size limit entries that were missed
AbhiPrasad Feb 24, 2025
301a1ca
Update packages/core/src/log.ts
k-fish Mar 4, 2025
6f3560c
Use '.' for param so it renders more nicely in the log attribute tree…
k-fish Mar 4, 2025
6215ad9
json the parameters
colin-sentry Mar 4, 2025
9048164
align attributes with what was agreed
AbhiPrasad Mar 4, 2025
4e0d9bd
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 4, 2025
a8673b7
fix: Duplicate export identifier
AbhiPrasad Mar 4, 2025
e9fa3bc
ref: introduce format function and restructure exports
AbhiPrasad Mar 4, 2025
2c3db7d
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 5, 2025
3ffc54b
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 5, 2025
cdf8bc5
chore: bump size-limit
AbhiPrasad Mar 5, 2025
0e77407
fix: ParamaterizeString typing to allow more than string values
AbhiPrasad Mar 6, 2025
4d0678a
feat: Add parent_span_id to outgoing logs
AbhiPrasad Mar 6, 2025
7b83155
feat: Export logging methods for node/server-side SDKs
AbhiPrasad Mar 6, 2025
6994781
fix: Set parent_span_id properly
AbhiPrasad Mar 6, 2025
8602f81
fix: Remove unneeded import
AbhiPrasad Mar 6, 2025
7d22aa2
chore: bump size-limit
AbhiPrasad Mar 6, 2025
d7e3479
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 6, 2025
bbb1698
Merge branch 'develop' into colin/log-api
colin-sentry Mar 11, 2025
c4b6d2d
feat(buffer): Add beforeSendLogs for sampling decisions
colin-sentry Mar 13, 2025
1da9a7f
clean up
colin-sentry Mar 13, 2025
5b66ccf
remove old comment
colin-sentry Mar 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions .size-limit.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,14 +8,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24 KB',
limit: '25 KB',
},
{
name: '@sentry/browser - with treeshaking flags',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24.1 KB',
limit: '24.5 KB',
modifyWebpackConfig: function (config) {
const webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin');
Expand All@@ -40,14 +40,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration'),
gzip: true,
limit: '37.5 KB',
limit: '38 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay)',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration'),
gzip: true,
limit: '75.2 KB',
limit: '77 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay) - with treeshaking flags',
Expand DownExpand Up@@ -79,7 +79,7 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration', 'replayCanvasIntegration'),
gzip: true,
limit: '80 KB',
limit: '82 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay, Feedback)',
Expand All@@ -100,14 +100,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'sendFeedback'),
gzip: true,
limit: '29 KB',
limit: '30 KB',
},
{
name: '@sentry/browser (incl. FeedbackAsync)',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'feedbackAsyncIntegration'),
gzip: true,
limit: '34 KB',
limit: '34.5 KB',
},
// React SDK (ESM)
{
Expand DownExpand Up@@ -210,7 +210,7 @@ module.exports = [
import: createImport('init'),
ignore: ['next/router', 'next/constants'],
gzip: true,
limit: '41 KB',
limit: '43 KB',
},
// SvelteKit SDK (ESM)
{
Expand All@@ -219,7 +219,7 @@ module.exports = [
import: createImport('init'),
ignore: ['$app/stores'],
gzip: true,
limit: '38 KB',
limit: '39 KB',
},
// Node SDK (ESM)
{
Expand Down
1 change: 1 addition & 0 deletions packages/astro/src/index.server.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -127,6 +127,7 @@ export {
withScope,
zodErrorsIntegration,
profiler,
_experiment_log,
} from '@sentry/node';

export { init } from './server/sdk';
Expand Down
1 change: 1 addition & 0 deletions packages/aws-serverless/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -113,6 +113,7 @@ export {
profiler,
amqplibIntegration,
vercelAIIntegration,
_experiment_log,
} from '@sentry/node';

export {
Expand Down
1 change: 1 addition & 0 deletions packages/browser/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,7 @@ export {
extraErrorDataIntegration,
rewriteFramesIntegration,
captureFeedback,
_experiment_log,
} from '@sentry/core';

export { replayIntegration, getReplay } from '@sentry-internal/replay';
Expand Down
1 change: 1 addition & 0 deletions packages/bun/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -132,6 +132,7 @@ export {
profiler,
amqplibIntegration,
vercelAIIntegration,
_experiment_log,
} from '@sentry/node';

export {
Expand Down
1 change: 1 addition & 0 deletions packages/cloudflare/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -85,6 +85,7 @@ export {
spanToTraceHeader,
spanToBaggageHeader,
updateSpanName,
_experiment_log,
} from '@sentry/core';

export { withSentry } from './handler';
Expand Down
116 changes: 116 additions & 0 deletions packages/core/src/exports.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import { getClient, getCurrentScope, getIsolationScope, withIsolationScope } from './currentScopes';
import { DEBUG_BUILD } from './debug-build';
import { captureLog, sendLog } from './log';
import type { CaptureContext } from './scope';
import { closeSession, makeSession, updateSession } from './session';
import type {
Expand All@@ -22,6 +23,7 @@ import { logger } from './utils-hoist/logger';
import { uuid4 } from './utils-hoist/misc';
import { timestampInSeconds } from './utils-hoist/time';
import { GLOBAL_OBJ } from './utils-hoist/worldwide';
import { parameterizeStringTemplate } from './utils/parameterize';
import type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';
import { parseEventHintOrCaptureContext } from './utils/prepareEvent';

Expand DownExpand Up@@ -334,3 +336,117 @@ export function captureSession(end: boolean = false): void {
// only send the update
_sendSessionUpdate();
}

/**
* A namespace for experimental logging functions.
*
* @experimental Will be removed in future versions. Use with caution.
*/
export const _experiment_log = {
/**
* A utility to record a log with level 'TRACE' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { trace, fmt } = Sentry._experiment_log;
* trace(fmt`user ${username} just bought ${item}!`);
* ```
*/
trace: sendLog('trace'),
/**
* A utility to record a log with level 'DEBUG' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { debug, fmt } = Sentry._experiment_log;
* debug(fmt`user ${username} just bought ${item}!`);
* ```
*/
debug: sendLog('debug'),
/**
* A utility to record a log with level 'INFO' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { info, fmt } = Sentry._experiment_log;
* info(fmt`user ${username} just bought ${item}!`);
* ```
*/
info: sendLog('info'),
/**
* A utility to record a log with level 'INFO' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { log, fmt } = Sentry._experiment_log;
* log(fmt`user ${username} just bought ${item}!`);
* ```
*/
log: sendLog('info', 10),
/**
* A utility to record a log with level 'ERROR' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { error, fmt } = Sentry._experiment_log;
* error(fmt`user ${username} just bought ${item}!`);
* ```
*/
error: sendLog('error'),
/**
* A utility to record a log with level 'WARN' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { warn, fmt } = Sentry._experiment_log;
* warn(fmt`user ${username} just bought ${item}!`);
* ```
*/
warn: sendLog('warn'),
/**
* A utility to record a log with level 'FATAL' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { fatal, fmt } = Sentry._experiment_log;
* fatal(fmt`user ${username} just bought ${item}!`);
* ```
*/
fatal: sendLog('fatal'),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the side-effect y'all are probably looking for.


/**
* Tagged template function which returns parameterized representation of the message
*
* @example
* ```js
* Sentry._experiment_log.fmt`This is a log statement with ${x} and ${y} params`
* ```
*/
fmt: parameterizeStringTemplate,

/**
* A flexible utility to record a log with a custom level and send it to sentry.
*
* You can optionally pass in custom attributes and a custom severity number to be attached to the log.
*
* @example
* ```js
* Sentry._experiment_log.emit({ level: 'info', message: Sentry._experiment_log.fmt`user ${username }just bought ${item}`, attributes: { extra: 123 } })
* ```
*/
emit: captureLog,
};
1 change: 1 addition & 0 deletions packages/core/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -29,6 +29,7 @@ export {
endSession,
captureSession,
addEventProcessor,
_experiment_log,
} from './exports';
export {
getCurrentScope,
Expand Down
Loading
, '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(logs): Add experimental user-callable logging methods by colin-sentry · Pull Request #15442 · getsentry/sentry-javascript · GitHub
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
bdcb9e1
initial work on .log
colin-sentry Feb 14, 2025
4281cbe
improve a bit
colin-sentry Feb 14, 2025
1869d6f
linting, etc
colin-sentry Feb 18, 2025
4b89486
fix: Rename ourlog -> log
AbhiPrasad Feb 20, 2025
2fe0e1b
ref: Namespace logging methods in experiment obj
AbhiPrasad Feb 20, 2025
21b16e8
ref: Improve log creation logic and update option name
AbhiPrasad Feb 20, 2025
9ac58b1
allow for multiple logs to be flushed in the same envelope
AbhiPrasad Feb 20, 2025
8fc4ae2
feat: Add release and environment to logs
AbhiPrasad Feb 20, 2025
f3adcde
ref: Change log buffer max length from 100 -> 25
AbhiPrasad Feb 20, 2025
bbc170d
feat: Send severityNumber
AbhiPrasad Feb 20, 2025
bab4c6e
ref: re-org functions and exports
AbhiPrasad Feb 20, 2025
f750d08
feat: Add log function
AbhiPrasad Feb 20, 2025
7218377
fix: use correct severity number for log
AbhiPrasad Feb 20, 2025
3e936c9
chore: Bump size-limit
AbhiPrasad Feb 24, 2025
b702cf0
chore: size limit entries that were missed
AbhiPrasad Feb 24, 2025
301a1ca
Update packages/core/src/log.ts
k-fish Mar 4, 2025
6f3560c
Use '.' for param so it renders more nicely in the log attribute tree…
k-fish Mar 4, 2025
6215ad9
json the parameters
colin-sentry Mar 4, 2025
9048164
align attributes with what was agreed
AbhiPrasad Mar 4, 2025
4e0d9bd
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 4, 2025
a8673b7
fix: Duplicate export identifier
AbhiPrasad Mar 4, 2025
e9fa3bc
ref: introduce format function and restructure exports
AbhiPrasad Mar 4, 2025
2c3db7d
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 5, 2025
3ffc54b
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 5, 2025
cdf8bc5
chore: bump size-limit
AbhiPrasad Mar 5, 2025
0e77407
fix: ParamaterizeString typing to allow more than string values
AbhiPrasad Mar 6, 2025
4d0678a
feat: Add parent_span_id to outgoing logs
AbhiPrasad Mar 6, 2025
7b83155
feat: Export logging methods for node/server-side SDKs
AbhiPrasad Mar 6, 2025
6994781
fix: Set parent_span_id properly
AbhiPrasad Mar 6, 2025
8602f81
fix: Remove unneeded import
AbhiPrasad Mar 6, 2025
7d22aa2
chore: bump size-limit
AbhiPrasad Mar 6, 2025
d7e3479
Merge branch 'develop' into colin/log-api
AbhiPrasad Mar 6, 2025
bbb1698
Merge branch 'develop' into colin/log-api
colin-sentry Mar 11, 2025
c4b6d2d
feat(buffer): Add beforeSendLogs for sampling decisions
colin-sentry Mar 13, 2025
1da9a7f
clean up
colin-sentry Mar 13, 2025
5b66ccf
remove old comment
colin-sentry Mar 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions .size-limit.js
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,14 +8,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24 KB',
limit: '25 KB',
},
{
name: '@sentry/browser - with treeshaking flags',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init'),
gzip: true,
limit: '24.1 KB',
limit: '24.5 KB',
modifyWebpackConfig: function (config) {
const webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin');
Expand All@@ -40,14 +40,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration'),
gzip: true,
limit: '37.5 KB',
limit: '38 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay)',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration'),
gzip: true,
limit: '75.2 KB',
limit: '77 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay) - with treeshaking flags',
Expand DownExpand Up@@ -79,7 +79,7 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'browserTracingIntegration', 'replayIntegration', 'replayCanvasIntegration'),
gzip: true,
limit: '80 KB',
limit: '82 KB',
},
{
name: '@sentry/browser (incl. Tracing, Replay, Feedback)',
Expand All@@ -100,14 +100,14 @@ module.exports = [
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'sendFeedback'),
gzip: true,
limit: '29 KB',
limit: '30 KB',
},
{
name: '@sentry/browser (incl. FeedbackAsync)',
path: 'packages/browser/build/npm/esm/index.js',
import: createImport('init', 'feedbackAsyncIntegration'),
gzip: true,
limit: '34 KB',
limit: '34.5 KB',
},
// React SDK (ESM)
{
Expand DownExpand Up@@ -210,7 +210,7 @@ module.exports = [
import: createImport('init'),
ignore: ['next/router', 'next/constants'],
gzip: true,
limit: '41 KB',
limit: '43 KB',
},
// SvelteKit SDK (ESM)
{
Expand All@@ -219,7 +219,7 @@ module.exports = [
import: createImport('init'),
ignore: ['$app/stores'],
gzip: true,
limit: '38 KB',
limit: '39 KB',
},
// Node SDK (ESM)
{
Expand Down
1 change: 1 addition & 0 deletions packages/astro/src/index.server.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -127,6 +127,7 @@ export {
withScope,
zodErrorsIntegration,
profiler,
_experiment_log,
} from '@sentry/node';

export { init } from './server/sdk';
Expand Down
1 change: 1 addition & 0 deletions packages/aws-serverless/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -113,6 +113,7 @@ export {
profiler,
amqplibIntegration,
vercelAIIntegration,
_experiment_log,
} from '@sentry/node';

export {
Expand Down
1 change: 1 addition & 0 deletions packages/browser/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -10,6 +10,7 @@ export {
extraErrorDataIntegration,
rewriteFramesIntegration,
captureFeedback,
_experiment_log,
} from '@sentry/core';

export { replayIntegration, getReplay } from '@sentry-internal/replay';
Expand Down
1 change: 1 addition & 0 deletions packages/bun/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -132,6 +132,7 @@ export {
profiler,
amqplibIntegration,
vercelAIIntegration,
_experiment_log,
} from '@sentry/node';

export {
Expand Down
1 change: 1 addition & 0 deletions packages/cloudflare/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -85,6 +85,7 @@ export {
spanToTraceHeader,
spanToBaggageHeader,
updateSpanName,
_experiment_log,
} from '@sentry/core';

export { withSentry } from './handler';
Expand Down
116 changes: 116 additions & 0 deletions packages/core/src/exports.ts
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
import { getClient, getCurrentScope, getIsolationScope, withIsolationScope } from './currentScopes';
import { DEBUG_BUILD } from './debug-build';
import { captureLog, sendLog } from './log';
import type { CaptureContext } from './scope';
import { closeSession, makeSession, updateSession } from './session';
import type {
Expand All@@ -22,6 +23,7 @@ import { logger } from './utils-hoist/logger';
import { uuid4 } from './utils-hoist/misc';
import { timestampInSeconds } from './utils-hoist/time';
import { GLOBAL_OBJ } from './utils-hoist/worldwide';
import { parameterizeStringTemplate } from './utils/parameterize';
import type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';
import { parseEventHintOrCaptureContext } from './utils/prepareEvent';

Expand DownExpand Up@@ -334,3 +336,117 @@ export function captureSession(end: boolean = false): void {
// only send the update
_sendSessionUpdate();
}

/**
* A namespace for experimental logging functions.
*
* @experimental Will be removed in future versions. Use with caution.
*/
export const _experiment_log = {
/**
* A utility to record a log with level 'TRACE' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { trace, fmt } = Sentry._experiment_log;
* trace(fmt`user ${username} just bought ${item}!`);
* ```
*/
trace: sendLog('trace'),
/**
* A utility to record a log with level 'DEBUG' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { debug, fmt } = Sentry._experiment_log;
* debug(fmt`user ${username} just bought ${item}!`);
* ```
*/
debug: sendLog('debug'),
/**
* A utility to record a log with level 'INFO' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { info, fmt } = Sentry._experiment_log;
* info(fmt`user ${username} just bought ${item}!`);
* ```
*/
info: sendLog('info'),
/**
* A utility to record a log with level 'INFO' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { log, fmt } = Sentry._experiment_log;
* log(fmt`user ${username} just bought ${item}!`);
* ```
*/
log: sendLog('info', 10),
/**
* A utility to record a log with level 'ERROR' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { error, fmt } = Sentry._experiment_log;
* error(fmt`user ${username} just bought ${item}!`);
* ```
*/
error: sendLog('error'),
/**
* A utility to record a log with level 'WARN' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { warn, fmt } = Sentry._experiment_log;
* warn(fmt`user ${username} just bought ${item}!`);
* ```
*/
warn: sendLog('warn'),
/**
* A utility to record a log with level 'FATAL' and send it to sentry.
*
* Logs represent a message and some parameters which provide context for a trace or error.
*
* @example
* ```js
* const { fatal, fmt } = Sentry._experiment_log;
* fatal(fmt`user ${username} just bought ${item}!`);
* ```
*/
fatal: sendLog('fatal'),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the side-effect y'all are probably looking for.


/**
* Tagged template function which returns parameterized representation of the message
*
* @example
* ```js
* Sentry._experiment_log.fmt`This is a log statement with ${x} and ${y} params`
* ```
*/
fmt: parameterizeStringTemplate,

/**
* A flexible utility to record a log with a custom level and send it to sentry.
*
* You can optionally pass in custom attributes and a custom severity number to be attached to the log.
*
* @example
* ```js
* Sentry._experiment_log.emit({ level: 'info', message: Sentry._experiment_log.fmt`user ${username }just bought ${item}`, attributes: { extra: 123 } })
* ```
*/
emit: captureLog,
};
1 change: 1 addition & 0 deletions packages/core/src/index.ts
Original file line numberDiff line numberDiff line change
Expand Up@@ -29,6 +29,7 @@ export {
endSession,
captureSession,
addEventProcessor,
_experiment_log,
} from './exports';
export {
getCurrentScope,
Expand Down
Loading