我正在试图弄清楚从正在运行的jake任务中改进记录到终端的消息的最佳方法是什么。
我希望能够通过终端显示格式正确的消息,不仅包括正在运行的服务器,还包括可能正在运行的任何其他任务(包括从其他任务调用)。例如,假设我执行jake run
以使服务器在开发时运行,它还会调用监视我的less css文件的jake watch
任务以进行更改。它也可以调用jake unit
(上面的例子中没有显示)来连续运行单元测试等......
我认为让记录器记录到文件(比如./dev.log
)并且只是在tail -f
任务中运行某种类型的jake run
是有意义的(现在具有额外的好处)如果这是一个合理的方法,那么:
./dev.log
的内容并将其流式传输到正在运行的任务/终端?如果没有,并且你有更好的建议,你能否朝着正确的方向发展?如果实施,我将在此处分享解决方案。
谢谢!
var servers = [
{
root: 'application',
port: 8000
},
{
root: 'dist',
port: 8001
}
];
// jake run
desc('Run when coding. (Watches files, compiles less, runs dev server, runs test, etc)');
task('run', {async: true}, function () {
jake.Task.watch.invoke(); // invoking the 'watch' teask which I keep separate
jake.logger.log('Starting static web servers:'); // simple logging through jake (this is what I'm trying to replace)
var connect = require('connect');
servers.forEach(function (server) {
jake.logger.log('localhost:' + server.port + ' -> ' + server.root);
connect(connect['static'](server.root)).listen(server.port);
});
});
desc('Watches for changes to the main .less file');
task('watch', function () {
var gaze = require('gaze');
gaze(['application/css/style.less'], function (err, watcher) {
this.on('all', function (event, filepath) {
var fs = require('fs');
var less = require('./node_modules/less/lib/less');
var parser = new (less.Parser)({
paths: ['./application/css'], // Specify search paths for @import directives
filename: 'style.less'
});
parser.parse(fs.readFileSync('./application/css/style.less', 'utf8'), function (err, tree) {
if (err) {
return console.error(err);
// TODO log error
} else {
fs.writeFileSync('./application/css/style.css', tree.toCSS({ compress: true }));
jake.logger.log('application/css/style.less > application/css/style.css');
complete();
// TODO log success
}
});
});
});
});
答案 0 :(得分:0)
找到一个解决方案:https://github.com/flatiron/winston
var colors = require('colors'); // in case I want to use color in messages
var winston = require('winston');
var logger = new (winston.Logger)({
exitOnError: false,
transports: [
new (winston.transports.Console)({
colorize: true,
handleExceptions: true
})
]
});
logger.cli();
然后在我的任务中:
logger.info('application/css/style.less > application/css/style.css');
或
logger.error("[" + err.type + "] [" + err.filename + ":" + err.line + "," + err.column + "]: " + err.message);
这对我来说很好。如果我可以将格式化程序功能传递给记录器,那就更好了,这样我就可以避免一遍又一遍地使用颜色,但是没有大问题。
非常感谢!