(self: Pino, args: PinoHookArgs, result: PinoResult)
| 130 | const integratedChannel = diagnosticsChannel.tracingChannel('pino_asJson'); |
| 131 | |
| 132 | function onPinoStart(self: Pino, args: PinoHookArgs, result: PinoResult): void { |
| 133 | if (!shouldTrackLogger(self)) { |
| 134 | return; |
| 135 | } |
| 136 | |
| 137 | const resultObj = stripIgnoredFields(result); |
| 138 | |
| 139 | const [captureObj, message, levelNumber] = args; |
| 140 | const level = self?.levels?.labels?.[levelNumber] || 'info'; |
| 141 | const messageKey = getPinoKey(self, 'pino.messageKey', 'msg'); |
| 142 | const logMessage = message || (resultObj?.[messageKey] as string | undefined) || ''; |
| 143 | |
| 144 | if (enableLogs && options.log.levels.includes(level)) { |
| 145 | const attributes: Record<string, unknown> = { |
| 146 | ...resultObj, |
| 147 | 'sentry.origin': 'auto.log.pino', |
| 148 | 'pino.logger.level': levelNumber, |
| 149 | }; |
| 150 | |
| 151 | _INTERNAL_captureLog({ level, message: logMessage, attributes }); |
| 152 | } |
| 153 | |
| 154 | if (options.error.levels.includes(level)) { |
| 155 | const errorKey = getPinoKey(self, 'pino.errorKey', 'err'); |
| 156 | |
| 157 | // Attach the log message and remaining log fields (e.g. child logger |
| 158 | // bindings, merge object fields) to the event. The serialized error is |
| 159 | // excluded since it is captured as the event exception itself. |
| 160 | const pinoContext: Record<string, unknown> = {}; |
| 161 | for (const [key, value] of Object.entries(resultObj)) { |
| 162 | if (key !== errorKey && key !== messageKey) { |
| 163 | pinoContext[key] = value; |
| 164 | } |
| 165 | } |
| 166 | if (logMessage) { |
| 167 | pinoContext[messageKey] = logMessage; |
| 168 | } |
| 169 | |
| 170 | const captureContext = { |
| 171 | level: severityLevelFromString(level), |
| 172 | contexts: { pino: pinoContext }, |
| 173 | }; |
| 174 | |
| 175 | withScope(scope => { |
| 176 | scope.addEventProcessor(event => { |
| 177 | event.logger = 'pino'; |
| 178 | |
| 179 | addExceptionMechanism(event, { |
| 180 | handled: options.error.handled, |
| 181 | type: 'auto.log.pino', |
| 182 | }); |
| 183 | |
| 184 | return event; |
| 185 | }); |
| 186 | |
| 187 | const error = captureObj[errorKey]; |
| 188 | if (error) { |
| 189 | captureException(error, captureContext); |
no test coverage detected