diff --git a/example-providers/homebridge-lockitron/index.js b/example-providers/homebridge-lockitron/index.js index ccd1b29..266dd24 100644 --- a/example-providers/homebridge-lockitron/index.js +++ b/example-providers/homebridge-lockitron/index.js @@ -3,8 +3,8 @@ import request from 'request'; // Create a logger for our provider let log = homebridge.logger('homebridge-lockitron'); -// Demonstrate that we were loaded -log.info("Lockitron provider loaded!"); +// Demonstrate that we were loaded - run homebridge with the "-D" option to see this message +log.debug("Lockitron provider loaded!"); module.exports = { diff --git a/lib/cli.js b/lib/cli.js index 7641e09..ed85ca7 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -1,17 +1,18 @@ import program from 'commander'; -import log from 'npmlog'; import prompt from 'prompt'; import { HOMEBRIDGE_VERSION } from './homebridge'; import { User } from './user'; import { Server } from './server'; import { Provider } from './provider'; +import { log, setDebugEnabled } from './logger'; import { camelCaseToRegularForm } from './util'; export default function() { // Global options (none currently) and version printout program - .version(HOMEBRIDGE_VERSION); + .version(HOMEBRIDGE_VERSION) + .option('-D, --debug', 'turn on debug level logging', () => setDebugEnabled(true)); // Run the HomeBridge server program @@ -48,13 +49,13 @@ function runServer(options) { this.providerModules = providers.map((provider) => provider.load()); } catch (err) { - console.log(err.message); + log.error(err.message); process.exit(1); } } function listInstalledProviders(options) { - Provider.installed().forEach((provider) => console.log(provider.name)); + Provider.installed().forEach((provider) => log.info(provider.name)); } // Encapsulates configuring a provider via the command line. @@ -64,7 +65,7 @@ class CliProviderSetup { // if you didn't specify a provider, print help if (!providerName) { log.error("You must specify the name of the provider to setup. Type 'homebridge providers' to list the providers currently installed."); - program.help(); + process.exit(1); } this.providerName = providerName; @@ -117,7 +118,7 @@ class CliProviderSetup { log.info(`Setup complete.`); } else { - log.error(`Setup failed: ${err.message}`); + log.error(`Setup failed: ${err.message || err}`); } } diff --git a/lib/logger.js b/lib/logger.js index 74d0496..0874a6a 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -1,4 +1,11 @@ -import log from 'npmlog'; +import chalk from 'chalk'; + +let DEBUG_ENABLED = false; + +// Turns on debug level logging +export function setDebugEnabled(enabled) { + DEBUG_ENABLED = enabled; +} // global cache of logger instances by provider name let loggerCache = {}; @@ -8,20 +15,44 @@ export class Logger { constructor(providerName: string) { this.providerName = providerName; } + + debug(msg: string) { + if (DEBUG_ENABLED) + this.log('debug', msg); + } info(msg: string) { - log.info(`[${this.providerName}] ${msg}`); + this.log('info', msg); } warn(msg: string) { - log.warn(`[${this.providerName}] ${msg}`); + this.log('warn', msg); } error(msg: string) { - log.error(`[${this.providerName}] ${msg}`); + this.log('error', msg); } - static forProvider(providerName: string):Logger { + log(level: string, msg: string) { + + if (level == 'debug') + msg = chalk.gray(msg); + else if (level == 'warn') + msg = chalk.yellow(msg); + else if (level == 'error') + msg = chalk.bold.red(msg); + + // prepend provider name if applicable + if (this.providerName) + msg = chalk.cyan(`[${this.providerName}]`) + " " + msg; + + console.log(msg); + } + + static forProvider(providerName: string): Logger { return loggerCache[providerName] || (loggerCache[providerName] = new Logger(providerName)); } -} \ No newline at end of file +} + +// system logger, for internal use only +export let log = new Logger(); diff --git a/package.json b/package.json index 187bcd5..8c6a582 100644 --- a/package.json +++ b/package.json @@ -27,9 +27,9 @@ "preferGlobal": true, "dependencies": { "babel": "^5.6.14", + "chalk": "^1.1.0", "commander": "^2.8.1", "hap-nodejs": "git+https://github.com/khaost/HAP-NodeJS#2a1bc8d99a2009317ab5da93faebea34c89f197c", - "npmlog": "^1.2.1", "prompt": "^0.2.14", "semver": "^4.3.6" }