0

我试图找出改善从正在运行的 jake 任务记录到终端的消息的最佳方法。

我希望能够通过终端显示格式良好的消息,不仅是正在运行的服务器,还有可能正在运行的任何其他任务(包括从其他任务调用)。例如,假设我jake run在开发时执行让服务器运行,这也会调用jake watch监视我的 less css 文件以进行更改的任务。它还可以调用jake unit(上面的示例中未显示)以连续运行单元测试等......

我认为将记录器记录到文件(例如)并简单地从该任务./dev.log中运行某种类型的文件是有意义的(现在拥有文件日志的额外好处。如果这是一种合理的方法,那么:tail -fjake 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
                }
            });

        });
    });
});
4

1 回答 1

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);

这对我来说很好。如果我可以将格式化程序函数传递给记录器会更好,这样我就可以避免一遍又一遍地使用颜色但没什么大不了的。

不管怎么说,多谢拉!

于 2012-12-28T21:21:58.073 回答