UNPKG

rclnodejs

Version:
197 lines (173 loc) 4.59 kB
// Copyright (c) 2018 Intel Corporation. All rights reserved. // // Licensed 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. 'use strict'; const path = require('path'); const rclnodejs = require('bindings')('rclnodejs'); /** * Enum for LoggingSeverity * @readonly * @enum {number} */ let LoggingSeverity = { /** @member {number} */ UNSET: 0, /** @member {number} */ DEBUG: 10, /** @member {number} */ INFO: 20, /** @member {number} */ WARN: 30, /** @member {number} */ ERROR: 40, /** @member {number} */ FATAL: 50, }; class Caller { constructor() { this._info = {}; let frame = new Error().stack.split('\n').slice(4, 5)[0]; let results = frame.match(/at\s+(.*)\s+\((.*):(\d*):(\d*)\)/i); if (results && results.length === 5) { this._info['functionName'] = results[1]; this._info['lineNumber'] = results[3]; this._info['fileName'] = path.basename(results[2]); } } get functionName() { return this._info.functionName; } get lineNumber() { return this._info.lineNumber; } get fileName() { return this._info.fileName; } } /** * @class - Class representing logger in ROS * @hideconstructor */ class Logging { constructor(name) { this._name = name; } /** * Set the logging severity level. * @param {LoggingSeverity} level - The logging severity level. * @function * @return {undefined} */ setLoggerLevel(level) { if (typeof level !== 'number') { throw new TypeError('Invalid argument'); } rclnodejs.setLoggerLevel(this._name, level); } /** * Get the logging severity level. * @function * @return {LoggingSeverity} - The severity level of the logger. */ get loggerEffectiveLevel() { return rclnodejs.getLoggerEffectiveLevel(this._name); } /** * Log a message with the DEBUG severity. * @param {string} message - message to be logged. * @function * @return {bool} Return true if the message has been logged. */ debug(message) { return this._log(message, LoggingSeverity.DEBUG); } /** * Log a message with the INFO severity. * @param {string} message - message to be logged. * @function * @return {bool} Return true if the message has been logged. */ info(message) { return this._log(message, LoggingSeverity.INFO); } /** * Log a message with the WARN severity. * @param {string} message - message to be logged. * @function * @return {bool} Return true if the message has been logged. */ warn(message) { return this._log(message, LoggingSeverity.WARN); } /** * Log a message with the ERROR severity. * @param {string} message - message to be logged. * @function * @return {bool} Return true if the message has been logged. */ error(message) { return this._log(message, LoggingSeverity.ERROR); } /** * Log a message with the FATAL severity. * @param {string} message - message to be logged. * @function * @return {bool} Return true if the message has been logged. */ fatal(message) { return this._log(message, LoggingSeverity.FATAL); } _log(message, severity) { if (typeof message !== 'string') { throw new TypeError('Invalid argument'); } let caller = new Caller(); return rclnodejs.log( this._name, severity, message, caller.functionName, caller.lineNumber, caller.fileName ); } /** * Get LoggingSeverity enum. * @function * @return {LoggingSeverity} Return LoggingSeverity enum. */ get LoggingSeverity() { return LoggingSeverity; } /** * Get name of the logger. * @function * @return {string} logger's name. */ get name() { return this._name; } /** * Create a logger by name. * @param {string} name - name of the logger. * @function * @return {Logging} Return the logger object. */ static getLogger(name) { if (typeof name !== 'string') { throw new TypeError('Invalid argument'); } return new Logging(name); } } module.exports = Logging;