我目前正在尝试在屏幕底部保留一个输入,以便我可以在顶部保留日志,同时还允许命令。我发现在线工作的所有解决方案,但问题是每当我使用winston(和自定义传输)进行日志记录时,readline提示会清除,但会保持在底部。它并没有被清除,它只是清除它的视觉效果。如果您输入“abc”,但输入“a”后会有新的日志,并且您继续输入,提示只会显示“> bc”,但是当您按Enter键时,程序会正确识别该行作为“abc”。
这就是我现在正在处理的问题。
//console.js
const readline = require("readline");
module.exports = () => {
const cli = readline.createInterface(process.stdin, process.stdout);
const logger = require("./logger.js")(cli);
cli.setPrompt("> ", 2);
cli.on("line", (line) => {
logger.info(line);
cli.prompt();
});
cli.prompt();
return logger;
};
//logger.js
const winston = require("winston");
class ConsoleTransport extends require("winston-transport") {
log(info, callback){
setImmediate(() => { this.emit('logged', info); });
this.cli.output.write('\x1b[2K\r');
console.log(info.message);
this.cli._refreshLine();
callback();
}
}
module.exports = (cli) => {
let consoleTransport = new ConsoleTransport();
consoleTransport.cli = cli;
return winston.createLogger({
format: winston.format.combine(
winston.format.colorize(),
winston.format.simple()
),
transports: [
consoleTransport
]
});
};