javascript - Winston visar inte text när kommatecken används som konkatenationsoperator
Mitt projekt använder just nu Winston-loggaren för att logga till konsolen. Problemet är att kommatecken används som sammanfogningsoperator i de flesta fall, som logger.info("here is data", data )
data är alltid en sträng, men det som loggas är bara "här är data" och inget annat.
Projektet använder komma som sammansättnings tecken på de flesta ställen, så att ersätta med '+ ' är tidskrävande. Vänligen ge råd om hur man ska visa data när kommatecken i sig förekommer.
Svar #1
du har i princip två sätt att kringgå det
1) ändra manuellt din logger.info-funktion för att ta flera parametrar, eller skriv ett logger-wrapper som kommer att sammanfoga strängen innan den skickas vidare till logger.info
info = (...args) => {
const data = args.reduce((acc, item) => acc += item);
// or such kind of manual concatenation logic
logger.info(data);
}
2) använd ES6 mallsträngar. Så istället för logger.info("here is data", data), använd
logger.info(`here is data ${data}`)
Svar #2
Baserat på Pressanas svar, på min createLogger-funktion som är ansvarig för att skapa en Winston-logger och exportera denna till de moduler som behöver logga, skapade jag en logger-middleware.
Här är det ett exempel
let env;
exports.createLogger = (envP) => {
env = envP;
const logger = winston.createLogger({
level: 'debug',
transports: [
new winston.transports.File({
filename: __dirname + '/error.log',
level: 'error'
}),
new winston.transports.File({
filename: __dirname + '/combined.log'
})
],
'colorize': true
});
const customLogger = getCustomLoggerMiddleware(logger);
if (env !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple()
}));
}
return customLogger;
}
function getCustomLoggerMiddleware(logger) {
const customLogger = {};
customLogger.error = reduceLogger(logger.error)
customLogger.warn = reduceLogger(logger.warn)
customLogger.info = reduceLogger(logger.info)
customLogger.http = reduceLogger(logger.http)
customLogger.verbose = reduceLogger(logger.verbose)
customLogger.debug = reduceLogger(logger.debug)
customLogger.silly = reduceLogger(logger.silly)
return customLogger;
}
function reduceLogger(loggerFun) {
return (...args) => {
const data = args.reduce((acc, item) => acc += item);
loggerFun(data);
}
}
createLogger-funktionen är en vanlig winston-loggerbyggare, magin händer i getCustomLoggerMiddleware
