logs para averiaguar el fallo de subida de archivos desde la app
This commit is contained in:
@@ -55,6 +55,76 @@ app.use((req, res, next) => {
|
||||
contentType.toLowerCase().startsWith('multipart/form-data');
|
||||
|
||||
if (isMultipartFormData) {
|
||||
const startedAt = process.hrtime.bigint();
|
||||
const baseLogPayload = {
|
||||
request_id: requestId,
|
||||
method: req.method,
|
||||
path: req.originalUrl || req.url,
|
||||
ip: req.ip || null,
|
||||
content_type: contentType,
|
||||
content_length: Number.parseInt(req.get('content-length'), 10) || null,
|
||||
has_authorization_header: Boolean(authorizationHeader),
|
||||
user_agent: String(req.get('user-agent') || '').slice(0, 255) || null
|
||||
};
|
||||
let responseFinished = false;
|
||||
|
||||
appendPostLog({
|
||||
event: 'upload_request_started',
|
||||
...baseLogPayload
|
||||
});
|
||||
|
||||
res.once('finish', () => {
|
||||
responseFinished = true;
|
||||
const parserStatus = req.uploadDiagnostics?.parser_status || 'not_reached';
|
||||
let failureStage = null;
|
||||
|
||||
if (res.statusCode >= 400) {
|
||||
if (parserStatus === 'rejected') {
|
||||
failureStage = 'multipart_parser';
|
||||
} else if (parserStatus === 'parsed') {
|
||||
failureStage = 'controller_or_persistence';
|
||||
} else {
|
||||
failureStage = 'authentication_rate_limit_or_route';
|
||||
}
|
||||
}
|
||||
|
||||
appendPostLog({
|
||||
event: 'upload_request_finished',
|
||||
...baseLogPayload,
|
||||
status_code: res.statusCode,
|
||||
duration_ms: Number(
|
||||
(Number(process.hrtime.bigint() - startedAt) / 1e6).toFixed(2)
|
||||
),
|
||||
request_complete: req.complete,
|
||||
outcome: res.statusCode < 400 ? 'success' : 'error',
|
||||
failure_stage: failureStage,
|
||||
upload: req.uploadDiagnostics || {
|
||||
parser_status: 'not_reached'
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
res.once('close', () => {
|
||||
if (responseFinished) {
|
||||
return;
|
||||
}
|
||||
|
||||
appendPostLog({
|
||||
event: 'upload_request_interrupted',
|
||||
...baseLogPayload,
|
||||
status_code: res.statusCode,
|
||||
duration_ms: Number(
|
||||
(Number(process.hrtime.bigint() - startedAt) / 1e6).toFixed(2)
|
||||
),
|
||||
request_complete: req.complete,
|
||||
outcome: 'interrupted',
|
||||
failure_stage: 'transport_or_client_disconnect',
|
||||
upload: req.uploadDiagnostics || {
|
||||
parser_status: 'not_reached'
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
return next();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user