Skip to content

Commit

Permalink
fix: parse structured logs, and handle ANSI escape codes in logs
Browse files Browse the repository at this point in the history
  • Loading branch information
jrmfg committed Jul 8, 2024
1 parent 47003fd commit 5018bcb
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 5 deletions.
5 changes: 4 additions & 1 deletion .eslintrc.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
{
"extends": "./node_modules/gts"
"extends": "./node_modules/gts",
"rules": {
"no-control-regex": 0
}
}
19 changes: 15 additions & 4 deletions src/logger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,14 +127,22 @@ export function getModifiedData(
return data;
}
const {isJSON, processedData} = processData(data, encoding);
let dataWithContext;

let dataWithContext: {
message: string | Uint8Array;
'logging.googleapis.com/labels': {execution_id: string | undefined};
'logging.googleapis.com/trace': string | undefined;
'logging.googleapis.com/spanId': string | undefined;
severity?: string | undefined;
};
if (isJSON) {
dataWithContext = getJSONWithContext(processedData, currentContext);
if (!(SEVERITY in dataWithContext)) {
dataWithContext[SEVERITY] = stderr ? 'ERROR' : 'INFO';
}
} else {
dataWithContext = getTextWithContext(processedData, currentContext);
}
if (stderr) {
dataWithContext[SEVERITY] = 'ERROR';
dataWithContext[SEVERITY] = stderr ? 'ERROR' : 'INFO';
}

return JSON.stringify(dataWithContext) + '\n';
Expand Down Expand Up @@ -178,6 +186,9 @@ function processData(data: Uint8Array | string, encoding?: BufferEncoding) {
return {isJSON: false, processedData: data};
}

// strip any leading ANSI terminal codes from the start of the decoded data
// before trying to parse it as json
decodedData = decodedData.replace(/\x1b[[(?);]{0,2}(;?\d)*./g, '');
try {
return {isJSON: true, processedData: JSON.parse(decodedData)};
} catch (e) {
Expand Down
38 changes: 38 additions & 0 deletions test/logger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,4 +148,42 @@ describe('getModifiedData', () => {
) + '\n';
assert.equal(modifiedData, expectedOutput);
});

it('parses firebase log severity', () => {
const modifiedData = <string>(
getModifiedData('testing info log level', undefined, false)
);
assert.equal('INFO', JSON.parse(modifiedData)['severity']);
assert.equal('testing info log level', JSON.parse(modifiedData)['message']);
});

it('parses firebase warning severity', () => {
const modifiedData = <string>(
getModifiedData(
'\u001b[33m{"severity":"WARNING","message":"testing warning log level"}\u001b[39m\n',
undefined,
true
)
);
assert.equal('WARNING', JSON.parse(modifiedData)['severity']);
assert.equal(
'testing warning log level',
JSON.parse(modifiedData)['message']
);
});

it('parses firebase error severity', () => {
const modifiedData = <string>(
getModifiedData(
'\u001b[31m{"severity":"ERROR","message":"testing error log level"}\u001b[39m\n',
undefined,
true
)
);
assert.equal('ERROR', JSON.parse(modifiedData)['severity']);
assert.equal(
'testing error log level',
JSON.parse(modifiedData)['message']
);
});
});

0 comments on commit 5018bcb

Please sign in to comment.