Skip to content

Commit 82b499d

Browse files
akapagergaczd
andcommitted
fix(logger): do not overwrite ecs objects with custom data
AUT-2249 Co-authored-by: Daniel Gergacz <[email protected]>
1 parent f6cf603 commit 82b499d

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

src/logger/logger.spec.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,17 @@ describe('Logger', () => {
4848
expect(logArguments.details).to.eql('forever');
4949
});
5050

51+
it('should not overwrite fields in ecs base log', () => {
52+
logger.info('wedidit', { event: { duration: 245 }, log: { ter: 'abc' } });
53+
54+
const logArguments = JSON.parse(outputStub.args[0][0]);
55+
expect(logArguments.event.action).to.eql('wedidit');
56+
expect(logArguments.event.duration).to.eql(245);
57+
expect(logArguments.log.logger).to.eql('mongo');
58+
expect(logArguments.log.level).to.eql(30);
59+
expect(logArguments.log.ter).to.eql('abc');
60+
});
61+
5162
it('should be callable without the data object', () => {
5263
logger.info('wedidit');
5364

@@ -116,6 +127,23 @@ describe('Logger', () => {
116127
expect(logArguments.error.context).to.eql(JSON.stringify(error.data));
117128
});
118129

130+
it('should not overwrite ecs error fields with custom data', () => {
131+
const error: Error & { data?: any } = new Error('failed');
132+
error.data = { test: 'data' };
133+
134+
logger.fromError('hi', error, { error: { bajvan: true } });
135+
136+
const logArguments = JSON.parse(outputStub.args[0][0]);
137+
138+
expect(logArguments.error).to.eql({
139+
type: error.name,
140+
stack_trace: error.stack,
141+
message: error.message,
142+
context: JSON.stringify(error.data),
143+
bajvan: true,
144+
});
145+
});
146+
119147
it('should log error as warning with action', () => {
120148
const error: Error & { data?: any } = new Error('failed');
121149
error.data = { test: 'data' };

src/logger/logger.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const DATA_LIMIT = 3000;
44
import { Timer } from '../timer/timer';
55
import { jsonFormatter } from '../formatter/json';
66
import { consoleOutput } from '../output/console';
7+
import { merge } from 'lodash';
78
const allowedKeys = ['output', 'formatter', 'transformers', 'outputFormat'];
89

910
interface ErrorWithData extends Error {
@@ -88,7 +89,7 @@ export class Logger {
8889
}
8990

9091
customError(severity: string, action: string, error: Error, data: unknown = {}) {
91-
this.log(severity, action, Object.assign(this.getErrorDetails(error), data));
92+
this.log(severity, action, merge(this.getErrorDetails(error), data));
9293
}
9394

9495
fromError(action: string, error: unknown, data: unknown = {}) {
@@ -108,7 +109,7 @@ export class Logger {
108109
return;
109110
}
110111

111-
let dataToLog = Object.assign(this.getBaseLogFields(level, action), data);
112+
let dataToLog = merge(this.getBaseLogFields(level, action), data);
112113

113114
Logger.config.transformers.forEach((transform) => {
114115
dataToLog = transform(dataToLog);
@@ -162,7 +163,7 @@ export class Logger {
162163
return {};
163164
}
164165

165-
return Object.assign(this.getBaseErrorDetails(error), this.getAxiosErrorDetails(error as AxiosError));
166+
return merge(this.getBaseErrorDetails(error), this.getAxiosErrorDetails(error as AxiosError));
166167
}
167168

168169
private getBaseErrorDetails(error: Error) {

0 commit comments

Comments
 (0)