Skip to content

Commit 1ed3d1c

Browse files
committed
Add support for server-side logFieldMaxLength
1 parent 62849ac commit 1ed3d1c

File tree

2 files changed

+55
-13
lines changed

2 files changed

+55
-13
lines changed

packages/core/src/tools/create-logger.js

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -284,27 +284,38 @@ const sendLog = async (logStreamFactory, options, event, message, data) => {
284284
data.input = truncateData(data.input, MAX_LENGTH);
285285
data.output = truncateData(data.output, MAX_LENGTH);
286286
}
287+
287288
// scrub throws an error if there are no secrets
288-
const safeMessage = truncateString(
289-
sensitiveValues.length ? scrub(message, sensitiveValues) : message
290-
);
291-
const safeData = recurseReplace(
292-
sensitiveValues.length ? scrub(data, sensitiveValues) : data,
293-
truncateString
294-
);
295-
const unsafeData = recurseReplace(data, truncateString);
289+
let safeMessage, safeData;
290+
if (sensitiveValues.length) {
291+
safeMessage = scrub(message, sensitiveValues);
292+
safeData = scrub(data, sensitiveValues);
293+
} else {
294+
safeMessage = message;
295+
safeData = data;
296+
}
297+
298+
let safeKeyData = _.pick(data, SAFE_LOG_KEYS);
299+
300+
if (event.logFieldMaxLength != null && event.logFieldMaxLength >= 0) {
301+
const truncate = (s) =>
302+
simpleTruncate(s, event.logFieldMaxLength, ' [...]');
303+
304+
safeMessage = truncate(safeMessage);
305+
safeData = recurseReplace(safeData, truncate);
306+
safeKeyData = recurseReplace(safeKeyData, truncate);
307+
}
308+
296309
// Keep safe log keys uncensored
297-
Object.keys(safeData).forEach((key) => {
298-
if (SAFE_LOG_KEYS.includes(key)) {
299-
safeData[key] = unsafeData[key];
300-
}
310+
Object.entries(safeKeyData).forEach(([key, value]) => {
311+
safeData[key] = value;
301312
});
302313

303314
safeData.request_headers = formatHeaders(safeData.request_headers);
304315
safeData.response_headers = formatHeaders(safeData.response_headers);
305316

306317
if (event.logToStdout) {
307-
toStdout(event, message, unsafeData);
318+
toStdout(event, message, safeData);
308319
}
309320

310321
if (options.logBuffer && data.log_type === 'console') {

packages/core/test/logger.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,37 @@ describe('logger', () => {
505505
]);
506506
});
507507

508+
it('should honor logFieldMaxLength from server', async () => {
509+
const bundle = {
510+
authData: {
511+
password: 'secret',
512+
key: '123456789',
513+
},
514+
};
515+
const logger = createlogger({ bundle, logFieldMaxLength: 40 }, options);
516+
517+
const data = {
518+
log_type: 'http',
519+
response_content: '9876543210-98765443210-9876543210-9876543210',
520+
request_data: '0123456789-0123456789-0123456789-0123456789',
521+
};
522+
523+
logger('200 GET https://example.com/test', data);
524+
const response = await logger.end(1000);
525+
response.status.should.eql(200);
526+
response.content.token.should.eql(options.token);
527+
response.content.logs.should.deepEqual([
528+
{
529+
message: '200 GET https://example.com/test',
530+
data: {
531+
log_type: 'http',
532+
response_content: '9876543210-98765443210-9876543210- [...]',
533+
request_data: '0:censored:9:f0d5b7b789:-0:censore [...]',
534+
},
535+
},
536+
]);
537+
});
538+
508539
it('should send multiple logs in a request', async () => {
509540
const logger = createlogger({}, options);
510541

0 commit comments

Comments
 (0)