summaryrefslogtreecommitdiffstats
path: root/lib/utils/logger.js
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2015-01-25 14:55:37 +0100
committerSamy Pessé <samypesse@gmail.com>2015-01-25 14:55:37 +0100
commit06ab84abe33a131c089f42bf0bd9ede8deb6e671 (patch)
tree2b011ec994ad3e085fd7e8db741294f8c67b09a0 /lib/utils/logger.js
parentbb5761e88548f607e3b0dc6b8e03c652c93a9511 (diff)
downloadgitbook-06ab84abe33a131c089f42bf0bd9ede8deb6e671.zip
gitbook-06ab84abe33a131c089f42bf0bd9ede8deb6e671.tar.gz
gitbook-06ab84abe33a131c089f42bf0bd9ede8deb6e671.tar.bz2
Improve logger module
Diffstat (limited to 'lib/utils/logger.js')
-rw-r--r--lib/utils/logger.js77
1 files changed, 77 insertions, 0 deletions
diff --git a/lib/utils/logger.js b/lib/utils/logger.js
new file mode 100644
index 0000000..6be4ea7
--- /dev/null
+++ b/lib/utils/logger.js
@@ -0,0 +1,77 @@
+var _ = require('lodash');
+var util = require('util');
+var color = require('bash-color');
+
+var LEVELS = {
+ DEBUG: 0,
+ INFO: 1,
+ WARNING: 2,
+ ERROR: 3
+};
+
+var COLORS = {
+ DEBUG: color.purple,
+ INFO: color.cyan,
+ WARNING: color.yellow,
+ ERROR: color.red
+};
+
+module.exports = function(_write, logLevel) {
+ var logger = {};
+ var lastChar = '\n';
+ if (_.isString(logLevel)) logLevel = LEVELS[logLevel.toUpperCase()];
+
+ // Write a simple message
+ logger.write = function(msg) {
+ msg = msg.toString();
+ lastChar = _.last(msg);
+ return _write(msg);
+ };
+
+ // Write a line
+ logger.writeLn = function(msg) {
+ return this.write((msg || "")+"\n");
+ };
+
+ // Write a message with a certain level
+ logger.log = function(level) {
+ if (level < logLevel) return;
+
+ var levelKey = _.findKey(LEVELS, function(v) { return v == level; });
+ var args = Array.prototype.slice.apply(arguments, [1]);
+ var msg = util.format.apply(util, args);
+
+ if (lastChar == '\n') {
+ msg = COLORS[levelKey](levelKey.toLowerCase()+":")+" "+msg;
+ }
+
+ return logger.write(msg);
+ };
+
+ // Write a OK
+ logger.ok = function(level) {
+ return logger.log(level, color.green("OK")+"\n");
+ };
+
+ // Write an "FAIL"
+ logger.fail = function(level) {
+ return logger.log(level, color.red("ERROR")+"\n");
+ };
+
+ _.each(LEVELS, function(level, levelKey) {
+ levelKey = levelKey.toLowerCase();
+
+ logger[levelKey] = _.partial(logger.log, level);
+ logger[levelKey].ln = function() {
+ var args = Array.prototype.slice.apply(arguments);
+ args.push("\n");
+ logger[levelKey].apply(logger, args);
+ };
+ logger[levelKey].ok = _.partial(logger.ok, level);
+ logger[levelKey].fail = _.partial(logger.fail, level);
+ });
+
+ return logger;
+};
+module.exports.LEVELS = LEVELS;
+module.exports.COLORS = COLORS;