Logs - nouknouk/node-zigate GitHub Wiki

The logging system in node-zigate can work in conjunction with any logging system of your choice.

log levels:

trace, debug, info, warn, error

setup the logs

The logging is defined during the creation of the Zigate.Driver or the Zigate.Coordinator object:

const Zigate = require('node-zigate');
let driver = new Zigate.Driver({
   log: /* myLogChoiceHere */
});

or

const Zigate = require('node-zigate');
let driver = new Zigate.Coordinator({
   log: /* myLogChoiceHere */
});

... where myLogChoiceHere can be:

  • one of the following predefined string:

    • 'nolog': no logs are produced at all (this is the default)
    • 'console' or 'trace': all logs are written to the console
    • 'debug': only logs with level debug and above are written to the console
    • 'info': only logs with level info and above are written to the console
    • 'warn': only logs with level warn and above are written to the console
    • 'error': only logs with level error are written to the console
  • any object having (all) the following methods: trace(), debug(), info(), warn(), error().

Example:

let driver = new Zigate.Driver({
    log: {
        trace: () => { console.log.bind  (console, '[TRACE '+((new Date()).getTime())+'] ', arguments); },
        debug: () => { console.debug.bind(console, '[DEBUG '+((new Date()).getTime())+'] ', arguments); },
        info: () =>  { console.debug.bind(console, '[INFO  '+((new Date()).getTime())+'] ', arguments); },
        warn: () =>  { console.warn.bind (console, '[WARN  '+((new Date()).getTime())+'] ', arguments); },
        error: () => { console.error.bind(console, '[ERROR '+((new Date()).getTime())+'] ', arguments); },
    }
});
  • any object having a method getLogger(mystringLoggerName) which returns itself an object with methods trace(), debug(), info(), warn(), error()

    • Zigate.Driver calls such method getLogger with parameter 'driver'
    • Zigate.Coordinator makes use of any object having both trace, debug... methods + a getLogger method, which is called by sub-parts of the coordinator (driver, loadsave sub-module, device recognition sub-module, ...)

This is usefull if (like me) you use the module log4js-nested

pretty logging

  • an extensive usage of the 'util.inspect()' feature is done, to expose usefull information when logging an object (driver commands, responses, coordinator devices & sub-components: clusters, attributes, values, ...)

  • the npm module colors is used to colorize the output

Resulting log look like:

sample_logs