Gemäß Winstons Dokumentation
Sie können den Log-Level eines Transports auch dynamisch ändern:
Winston 2.x
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({ level: 'warn' }),
new (winston.transports.File)({ filename: 'somefile.log', level: 'error' })
]
});
logger.debug("Will not be logged in either transport!");
logger.transports.console.level = 'debug';
logger.transports.file.level = 'verbose';
logger.verbose("Will be logged in both transports!");
Winston 3.x
const transports = {
console: new winston.transports.Console({ level: 'warn': level: 'warn' }),
file: new winston.transports.File({ filename: 'combined.log', level: 'error' })
};
const logger = winston.createLogger({
transports: [
transports.console,
transports.file
]
});
logger.info('Will not be logged in either transport!');
transports.console.level = 'info';
transports.file.level = 'info';
logger.info('Will be logged in both transports!');
Wie kann ich das Level in 3.0 ändern, wenn ich so erstellt habe?
var logger = new (winston.Logger)({
transports: [
new (winston.transports.Console)({ level: 'warn' }),
new (winston.transports.File)({ filename: 'somefile.log', level: 'error' })
]
});
Ist es nicht offensichtlich, dass die vorherige Version des dynamischen Level-Change-Mechanismus viel besser ist als die neue.
Ich suche auch nach der Lösung für Winston 3.x ähnlich wie oben
Ich hatte die Transporte außerhalb der Funktion winston.create() und änderte von außen, es funktionierte!
var transportsList = const transports = {
console: new winston.transports.Console({ level: 'warn': level: 'warn' }),
file: new winston.transports.File({ filename: 'combined.log', level: 'error' })
};
var logger = new (winston.Logger)({
transports: transportsList
});
//Then change below
transportsList.console.level = 'silly'
Schließt als Duplikat von #1191. Dies steht auf unserer Roadmap und wird behoben, bevor [email protected]
am 29. Mai 2018 veröffentlicht wird.
Das hat bei mir funktioniert, ich habe jedem Transport einen Namen gegeben, der mit dem Namen verschlüsselt ist, damit ich über ref darauf zugreifen kann, da das Logger-Objekt nicht direkt zugänglich ist.
`
var self = this;
self.logger = self.winston.createLogger({
levels:self.winston.config.syslog.levels
,transports:
[
new self.winston.transports.Console({
level: self.config.console.level.ref
,formatter: self._consoleLogFormatter
,name: 'console'
})
]
});
self.transports = _.keyBy(self.logger.transports,"name");
self.transports.console.level = 'info';
`