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