Javascript WinstonJS没有记录数据
首先看看我当前的WinstonJS配置:Javascript WinstonJS没有记录数据,javascript,node.js,winston,Javascript,Node.js,Winston,首先看看我当前的WinstonJS配置: const appRoot = require('app-root-path'); const winston = require('winston'); const path = require('path') require('winston-daily-rotate-file'); const levels = { levels: { product: 1, error: 1, warn:
const appRoot = require('app-root-path');
const winston = require('winston');
const path = require('path')
require('winston-daily-rotate-file');
const levels = {
levels: {
product: 1,
error: 1,
warn: 3,
info: 4,
debug: 5
},
colors: {
product: 'magenta',
error: 'red',
warning: 'yellow',
info: 'green',
debug: 'blue',
}
}
let getLabel = function(callingModule){
//To support files which don't have an module
if(typeof callingModule == 'string'){
return callingModule;
}
let parts = callingModule.filename.split(path.sep);
return path.join(parts[parts.length -2], parts.pop());
}
const errorFilter = winston.format( (info, opts) => {
return info.level == 'error' ? info : false;
})
const productFilter = winston.format( (info, opts) => {
return info.level == 'product' ? info : false
})
module.exports = function(callingModule){
const logger = winston.createLogger({
levels: levels.levels,
format: winston.format.combine(
winston.format.colorize(),
winston.format.timestamp({
format: 'DD-MM-YYYY HH:mm:ss'
}),
winston.format.label({label: getLabel(callingModule)}),
winston.format.printf(info => `[${info.timestamp}] [${info.level}] [${info.label}]: ${info.message}`)
),
transports: [
new winston.transports.DailyRotateFile({
name: "Error logs",
filename: `${appRoot}/logs/error-%DATE%.log`,
level: 'error',
label: getLabel(callingModule),
datePattern: 'YYYY-MM-DD',
maxSize: '20m',
maxFiles: '14d',
format: winston.format.combine(
errorFilter(),
winston.format.colorize(),
winston.format.timestamp({
format: 'DD-MM-YYYY HH:mm:ss'
}),
winston.format.label({label: getLabel(callingModule)}),
winston.format.printf(info => `[${info.timestamp}] [${info.level}] [${info.label}]: ${info.message}`)
),
}),
new winston.transports.DailyRotateFile({
name: "Product logs",
filename: `${appRoot}/logs/product-%DATE%.log`,
level: 'product',
label: getLabel(callingModule),
datePattern: 'YYYY-MM-DD',
maxSize: '20m',
maxFiles: '14d',
format: winston.format.combine(
productFilter(),
winston.format.colorize(),
winston.format.timestamp({
format: 'DD-MM-YYYY HH:mm:ss'
}),
winston.format.label({label: getLabel(callingModule)}),
winston.format.printf(info => `[${info.timestamp}] [${info.level}] [${info.label}]: ${info.message}`)
),
})
]
})
winston.addColors(levels.colors);
let env = process.env.NODE_ENV;
if (env !== 'production'){
logger.add(new winston.transports.Console({
name: "Debug logs",
level: 'debug',
label: getLabel(callingModule),
prettyPrint: function ( object ){
return JSON.stringify(object);
}
}))
}
else if (env !== 'development') {
logger.add(winston.transports.DailyRotateFile({
name: "Combined logs",
filename: `${appRoot}/logs/combined-%DATE%.log`,
level: 'error',
datePattern: 'YYYY-MM-DD-HH',
maxSize: '20m',
maxFiles: '14d'
}))
}
logger.stream = {
write: (message, encoding) => {
logger.info(message);
}
}
return logger;
}
这很好,我可以登录多个级别,某些级别将写入文件,具体取决于进程运行的环境
但是,我无法将诸如对象、数组甚至字符串之类的数据记录到我的控制台(可能还包括文件)。例如:
var dates = JSON.parse(req.query.dates);
console.debug("DATES", dates)
它只打印“日期”
我试图重新配置格式以打印数据,但无法使其工作
我试图在configs中添加json:true/false、winston.format.flat()、winstom.format.json()、${json.stringify(info.message)},但结果不同。
如何更改此配置以在控制台(和文件)中记录数据
我们正在从默认控制台()更改为winston,因此我们正在记录的数据是正确的,并且在更改之前它是有效的。仅将.log()更改为debug()