0

実行中の jake タスクから端末に記録されるメッセージを改善する最善の方法を見つけようとしています。

実行中のサーバーだけでなく、実行中の他のタスク (他のタスクからの呼び出しを含む) から、適切にフォーマットされたメッセージをターミナル経由で表示できるようにしたいと考えています。たとえば、開発中にサーバーを実行するために実行すると、less css ファイルの変更を監視jake runするタスクも呼び出されます。また、単体テストなどを継続的に実行するためにjake watch呼び出すこともできます(上記の例には示されていません)。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

1つの解決策が見つかりました: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 に答える