Log / info methods don't respect metadata overrides
See original GitHub issuePlease tell us about your environment:
winston
version?-
winston@2
-
winston@3
-
node -v
outputs: v10.14.2- Operating System? (Windows, macOS, or Linux) Windows and Linux
- Language? all
What is the problem?
If I create a root logger with some default metadata property and a format string containing metadata, then create a child logger, calling child.info('test')
ignores the metadata set on the child.
If I call child.log({ level: 'info, message: 'test' })
the metadata is honored.
I also noticed that this behavior is broken even on the root logger. If you use defaultMeta, it will overwrite data in your info object.
What do you expect to happen instead?
I expect the child behave consistently when calling .log
and .info
Other information
There seem to be a few problems here.
First Problem:
When you create a logger with default metadata, it is stored as defaultMeta
. When you call log(info)
, the default metaData is applied onto info
, effectively overwriting whatever you passed.
logger.log({ level: 'debug', message: 'root log', component: 'ROOT2' });
// => [debug][ROOT]: root log
_addDefaultMeta(msg) {
if (this.defaultMeta) {
Object.assign(msg, this.defaultMeta); // msg gets overwritten with defaultMeta
}
}
}
this function should probably assign in reverse order to a blank object and return the value…
Second Problem:
When calling .info()
, the same happens:
logger.info({ message: 'root info', component: 'ROOT2' });
// => [info][ROOT]: root info
Third Problem:
When creating a child logger which overrides component, if you call .info
on the child, the metadata from the root is used instead. This is because the child()
method only overrides write()
Please let me know if you need a full reproduction. I can try to provide one.
Issue Analytics
- State:
- Created 5 years ago
- Reactions:7
- Comments:15 (10 by maintainers)
Top GitHub Comments
This bug is affecting me as well. The problem is, that I cannot overwrite
defaultMeta
.I have created a PR that I believe will address your issue, as well as mine @kbirger. Please test it and let me know if it does not function as expected.