@@ -79,57 +79,60 @@ export function _INTERNAL_captureLog(
79
79
return ;
80
80
}
81
81
82
- client . emit ( 'beforeCaptureLog' , beforeLog ) ;
83
-
84
- const log = beforeSendLog ? beforeSendLog ( beforeLog ) : beforeLog ;
85
- if ( ! log ) {
86
- client . recordDroppedEvent ( 'before_send' , 'log_item' , 1 ) ;
87
- DEBUG_BUILD && logger . warn ( 'beforeSendLog returned null, log will not be captured.' ) ;
88
- return ;
89
- }
90
-
91
82
const [ , traceContext ] = _getTraceInfoFromScope ( client , scope ) ;
92
83
93
- const { level, message, attributes, severityNumber } = log ;
94
-
95
- const logAttributes = {
96
- ...attributes ,
84
+ const processedLogAttributes = {
85
+ ...beforeLog . attributes ,
97
86
} ;
98
87
99
88
if ( release ) {
100
- logAttributes [ 'sentry.release' ] = release ;
89
+ processedLogAttributes [ 'sentry.release' ] = release ;
101
90
}
102
91
103
92
if ( environment ) {
104
- logAttributes [ 'sentry.environment' ] = environment ;
93
+ processedLogAttributes [ 'sentry.environment' ] = environment ;
105
94
}
106
95
107
96
const { sdk } = client . getSdkMetadata ( ) ?? { } ;
108
97
if ( sdk ) {
109
- logAttributes [ 'sentry.sdk.name' ] = sdk . name ;
110
- logAttributes [ 'sentry.sdk.version' ] = sdk . version ;
98
+ processedLogAttributes [ 'sentry.sdk.name' ] = sdk . name ;
99
+ processedLogAttributes [ 'sentry.sdk.version' ] = sdk . version ;
111
100
}
112
101
113
- if ( isParameterizedString ( message ) ) {
114
- const { __sentry_template_string__, __sentry_template_values__ = [ ] } = message ;
115
- logAttributes [ 'sentry.message.template' ] = __sentry_template_string__ ;
102
+ const beforeLogMessage = beforeLog . message ;
103
+ if ( isParameterizedString ( beforeLogMessage ) ) {
104
+ const { __sentry_template_string__, __sentry_template_values__ = [ ] } = beforeLogMessage ;
105
+ processedLogAttributes [ 'sentry.message.template' ] = __sentry_template_string__ ;
116
106
__sentry_template_values__ . forEach ( ( param , index ) => {
117
- logAttributes [ `sentry.message.parameter.${ index } ` ] = param ;
107
+ processedLogAttributes [ `sentry.message.parameter.${ index } ` ] = param ;
118
108
} ) ;
119
109
}
120
110
121
111
const span = _getSpanForScope ( scope ) ;
122
112
if ( span ) {
123
113
// Add the parent span ID to the log attributes for trace context
124
- logAttributes [ 'sentry.trace.parent_span_id' ] = span . spanContext ( ) . spanId ;
114
+ processedLogAttributes [ 'sentry.trace.parent_span_id' ] = span . spanContext ( ) . spanId ;
125
115
}
126
116
117
+ const processedLog = { ...beforeLog , attributes : processedLogAttributes } ;
118
+
119
+ client . emit ( 'beforeCaptureLog' , processedLog ) ;
120
+
121
+ const log = beforeSendLog ? beforeSendLog ( processedLog ) : processedLog ;
122
+ if ( ! log ) {
123
+ client . recordDroppedEvent ( 'before_send' , 'log_item' , 1 ) ;
124
+ DEBUG_BUILD && logger . warn ( 'beforeSendLog returned null, log will not be captured.' ) ;
125
+ return ;
126
+ }
127
+
128
+ const { level, message, attributes = { } , severityNumber } = log ;
129
+
127
130
const serializedLog : SerializedOtelLog = {
128
131
severityText : level ,
129
132
body : {
130
133
stringValue : message ,
131
134
} ,
132
- attributes : Object . entries ( logAttributes ) . map ( ( [ key , value ] ) => logAttributeToSerializedLogAttribute ( key , value ) ) ,
135
+ attributes : Object . entries ( attributes ) . map ( ( [ key , value ] ) => logAttributeToSerializedLogAttribute ( key , value ) ) ,
133
136
timeUnixNano : `${ new Date ( ) . getTime ( ) . toString ( ) } 000000` ,
134
137
traceId : traceContext ?. trace_id ,
135
138
severityNumber : severityNumber ?? SEVERITY_TEXT_TO_SEVERITY_NUMBER [ level ] ,
0 commit comments