diff --git a/index.d.ts b/index.d.ts index 547bce721..94974c8bd 100644 --- a/index.d.ts +++ b/index.d.ts @@ -69,6 +69,7 @@ declare namespace winston { type LogCallback = (error?: any, level?: level, message?: string, meta?: any) => void; + type ChildMergeFunc = (overrideMetadata: Object, currentMetadata: Object) => Object; interface LogEntry { level: level; @@ -152,7 +153,7 @@ declare namespace winston { configure(options: LoggerOptions): void; - child(options: Object): Logger; + child(options: Object, mergeFunc?: ChildMergeFunc): Logger; isLevelEnabled(level: level): boolean; isErrorEnabled(): boolean; diff --git a/lib/winston/logger.js b/lib/winston/logger.js index 30d7dc0f4..17eb4ff87 100644 --- a/lib/winston/logger.js +++ b/lib/winston/logger.js @@ -42,16 +42,12 @@ class Logger extends Transform { this.configure(options); } - child(defaultRequestMetadata) { + child(defaultRequestMetadata, mergeFunc = (overrides, current) => Object.assign({}, overrides, current)) { const logger = this; return Object.create(logger, { write: { value: function (info) { - const infoClone = Object.assign( - {}, - defaultRequestMetadata, - info - ); + const infoClone = mergeFunc(defaultRequestMetadata, info); // Object.assign doesn't copy inherited Error // properties so we have to do that explicitly