我正在尝试让Winston打印到控制台,所以我把它放在一个文件中并用节点运行它:
var winston = require('winston');
winston.cli();
winston.data({
a: "test",
of: "many",
properties: {
like: "this"
}
});
winston.data('data', {
a: "test",
of: "many",
properties: {
like: "this"
}
});
终端吐出以下(不完全相同)的消息:
data: a=test, of=many, like=this
data: data a=test, of=many, like=this
我按照Winston Readme上的说明操作(“在CLI工具中使用winston”)。我误读了什么吗?在某个地方错过了设置?
答案 0 :(得分:30)
我找到了答案(文档不正确)。如果使用构造函数并手动添加传输,则可以为winston和单个传输设置选项。某些选项需要直接添加到winston,而其他选项需要添加到传输中。
E.g:
var winston = require('winston');
var logger = new (winston.Logger)({
levels: {
trace: 0,
input: 1,
verbose: 2,
prompt: 3,
debug: 4,
info: 5,
data: 6,
help: 7,
warn: 8,
error: 9
},
colors: {
trace: 'magenta',
input: 'grey',
verbose: 'cyan',
prompt: 'grey',
debug: 'blue',
info: 'green',
data: 'grey',
help: 'cyan',
warn: 'yellow',
error: 'red'
}
});
logger.add(winston.transports.Console, {
level: 'trace',
prettyPrint: true,
colorize: true,
silent: false,
timestamp: false
});
logger.add(winston.transports.File, {
prettyPrint: false,
level: 'info',
silent: false,
colorize: true,
timestamp: true,
filename: './nKindler.log',
maxsize: 40000,
maxFiles: 10,
json: false
});
答案 1 :(得分:7)
如果您使用的是winston@3.0.0-rc0,则接受的答案将无效。请尝试以下方法:
const winston = require("winston");
let date = new Date().toISOString();
const logFormat = winston.format.printf(function(info) {
return `${date}-${info.level}: ${JSON.stringify(info.message, null, 4)}\n`;
});
const logger = new winston.createLogger({
transports: [
new winston.transports.Console({
level: level,
format: winston.format.combine(winston.format.colorize(), logFormat)
})
]
});
日志将采用以下格式:
它的颜色是BTW
2018-03-01T19:49:54.042Z-info: "----- Customer Details ------"
2018-03-01T19:49:54.042Z-info: [
{
"A": 1,
"B": 2
}
]
答案 2 :(得分:2)
我接受了@ partycoder的回答并将其修剪为仅使用winston附带的默认日志记录级别。它也没有扭转错误的顺序。 0 =最高优先级。
winston.addColors({
silly: 'magenta',
debug: 'blue',
verbose: 'cyan',
info: 'green',
warn: 'yellow',
error: 'red'
});
winston.remove(winston.transports.Console);
winston.add(winston.transports.Console, {
level: process.env.LOG_LEVEL,
prettyPrint: true,
colorize: true,
silent: false,
timestamp: false
});
答案 3 :(得分:2)
这是Winston v3 +的解决方案
let winstonFormat = winston.format.json();
if (NODE_ENV == "development") {
winstonFormat = winston.format.combine(winston.format.json(), winston.format.prettyPrint());
}
const log = winston.createLogger({
level: "info",
format: winstonFormat,
defaultMeta: {app: "myapp"},
transports: [
new winston.transports.File({filename: "/dev/stderr", level: "warn"}),
new winston.transports.File({filename: "/dev/stdout"}),
],
});
答案 4 :(得分:0)
我也遇到了同样的问题,但是我在git上遇到了这个问题,并且发现了一些有趣的技巧可能对此有所帮助。 issue #1217
首先,诀窍在于使用
JSON.stringify(jsonData, null, 4) // This helps indent lines and make them readable
您可以在下面的此Visual Studio代码屏幕快照中查看它,以获取清晰的文档 how to use JSON.stringify
例如,如果您使用控制台传输器,则可以这样创建
transports: [
new winston.transports.Console({
format: printf((info) => {
return `${info.timestamp} [${info.label}] [${info.level}] : ${info.message}\n
${JSON.stringify(info.meta, null, 4)}`; // Meta as additional data you provide while logging
;
})
})
]
并像使用它
Logger.info("Message text", { meta: metaDataHere } )