You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by an...@apache.org on 2015/09/18 12:37:07 UTC

cordova-cli git commit: CB-8198 Unified console output logic for core platforms

Repository: cordova-cli
Updated Branches:
  refs/heads/master c5acc3dcb -> 8c1d9ce02


CB-8198 Unified console output logic for core platforms

Added advanced ansi-based logger
Redirected events to logger

This closes #222


Project: http://git-wip-us.apache.org/repos/asf/cordova-cli/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-cli/commit/8c1d9ce0
Tree: http://git-wip-us.apache.org/repos/asf/cordova-cli/tree/8c1d9ce0
Diff: http://git-wip-us.apache.org/repos/asf/cordova-cli/diff/8c1d9ce0

Branch: refs/heads/master
Commit: 8c1d9ce026cb086d7339c74a4dc106a5b1761f28
Parents: c5acc3d
Author: daserge <v-...@microsoft.com>
Authored: Thu Sep 10 15:48:05 2015 +0300
Committer: Vladimir Kotikov <v-...@microsoft.com>
Committed: Fri Sep 18 13:36:49 2015 +0300

----------------------------------------------------------------------
 package.json  |   1 +
 src/cli.js    |  22 ++++++-----
 src/logger.js | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 123 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/8c1d9ce0/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 5aaf32f..6fab749 100644
--- a/package.json
+++ b/package.json
@@ -29,6 +29,7 @@
     "cli"
   ],
   "dependencies": {
+    "ansi": "^0.3.0",
     "cordova-lib": "5.3.1",
     "q": "1.0.1",
     "nopt": "3.0.1",

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/8c1d9ce0/src/cli.js
----------------------------------------------------------------------
diff --git a/src/cli.js b/src/cli.js
index c141e48..fdf59be 100644
--- a/src/cli.js
+++ b/src/cli.js
@@ -29,7 +29,8 @@ var path = require('path'),
     nopt,
     _,
     updateNotifier,
-    pkg = require('../package.json');
+    pkg = require('../package.json'),
+    logger = require('./logger');
 
 var cordova_lib = require('cordova-lib'),
     CordovaError = cordova_lib.CordovaError,
@@ -131,25 +132,28 @@ function cli(inputArgs) {
     // are in a verbose mode.
     process.on('uncaughtException', function(err){
         if ( (err instanceof CordovaError) && !args.verbose ) {
-            console.error(err.message);
+            events.emit('error', err.message);
         } else {
-            console.error(err.stack);
+            events.emit('error', err.stack);
         }
         process.exit(1);
     });
 
+    events.on('verbose', logger.verbose);
+    events.on('log', logger.normal);
+    events.on('info', logger.info);
+    events.on('warn', logger.warn);
+    events.on('error', logger.error);
 
     // Set up event handlers for logging and results emitted as events.
-    events.on('results', console.log);
+    events.on('results', logger.results);
 
-    if ( !args.silent ) {
-        events.on('log', console.log);
-        events.on('warn', console.warn);
+    if (args.silent) {
+        logger.setLevel('error');
     }
 
-    // Add handlers for verbose logging.
     if (args.verbose) {
-        events.on('verbose', console.log);
+        logger.setLevel('verbose');
     }
 
     // TODO: Example wanted, is this functionality ever used?

http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/8c1d9ce0/src/logger.js
----------------------------------------------------------------------
diff --git a/src/logger.js b/src/logger.js
new file mode 100644
index 0000000..93b8bd6
--- /dev/null
+++ b/src/logger.js
@@ -0,0 +1,109 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+var util = require('util'),
+    ansi = require('ansi'),
+    Stream = require('stream'),
+    cordova_lib = require('cordova-lib'),
+    CordovaError = cordova_lib.CordovaError;
+
+var EOL = require('os').EOL;
+
+var logger = {
+    levels: {},
+    prefixes: {},
+    colors: {},
+    output: process.stdout
+};
+
+logger.cursor = ansi(logger.output);
+
+function formatError(error, isVerbose) {
+    var message = '';
+
+    if(error instanceof CordovaError) {
+        message = error.toString(isVerbose);
+    } else if(error instanceof Error) {
+        if(isVerbose) {
+            message = error.stack;
+        } else {
+            message = error.message;
+        }
+    }
+
+    // Some error messages start with 'Error: ' prefix, so cut it off here to avoid duplication.
+    // This will also remove generic Error.name (type), which Error.stack outputs in verbose mode,
+    // i.e. events.emit('error', new Error('...')), while preserving a specific Error type like RangeError.
+    // TODO: Update platforms code to remove such prefixes
+    message = message && message.replace(/^error:\s+/i, '');
+
+    return message;
+}
+
+logger.log = function (logLevel, message) {
+    if (this.levels[logLevel] >= this.levels[this.logLevel]) {
+        var isVerbose = this.logLevel === 'verbose';
+        var prefix = this.prefixes[logLevel] ? this.prefixes[logLevel] + ': ' : '';
+
+        if(message instanceof Error) {
+            message = formatError(message, isVerbose);
+        }
+
+        message = prefix + message + EOL;
+
+        if (!this.cursor) {
+            this.output.write(message);
+        }
+        if (this.output !== this.cursor.stream) {
+            this.cursor = ansi(this.output, { enabled: colorEnabled });
+        }
+        var color = this.colors[logLevel];
+        !!color && this.cursor.bold().fg[color]();
+        this.cursor.write(message);
+        this.cursor.reset();
+    }
+};
+
+logger.addLevel = function (level, severity, prefix, color) {
+    this.levels[level] = severity;
+    prefix && (this.prefixes[level] = prefix);
+    color && (this.colors[level] = color);
+
+    if (!this[level]) {
+        this[level] = this.log.bind(this, level);
+        return this[level];
+    }
+};
+
+logger.setLevel = function (logLevel) {
+    if (this.levels[logLevel]) {
+        this.logLevel = logLevel;
+    }
+};
+
+logger.addLevel('verbose', 1000, 'VERB ', 'grey');
+logger.addLevel('normal' , 2000, 'LOG  ');
+logger.addLevel('warn'   , 2000, 'WARN ', 'yellow');
+logger.addLevel('info'   , 3000, 'INFO ', 'blue');
+logger.addLevel('error'  , 5000, 'ERROR', 'red');
+logger.addLevel('results' , 10000);
+
+logger.setLevel('normal');
+
+module.exports = logger;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org