shaku
Version:
A simple and effective JavaScript game development framework that knows its place!
175 lines (155 loc) • 3.63 kB
JavaScript
/**
* Implement basic logger.
* By default, uses console for logging, but it can be replaced with setDrivers().
*
* |-- copyright and license --|
* @module Shaku
* @file shaku\src\logger.js
* @author Ronen Ness (ronenness@gmail.com | http://ronenness.com)
* @copyright (c) 2021 Ronen Ness
* @license MIT
* |-- end copyright and license --|
*
*/
;
// default logger drivers.
var _drivers = console;
// application name
var _application = "Shaku";
/**
* A logger manager.
* By default writes logs to console.
*/
class Logger
{
constructor(name)
{
this._nameHeader = ('[' + _application + '][' + name + ']').padEnd(25, ' ');
this._throwErrors = false;
}
/**
* Write a trace level log message.
* @param {String} msg Message to write.
*/
trace(msg)
{
_drivers.trace(this._nameHeader, msg);
}
/**
* Write a debug level log message.
* @param {String} msg Message to write.
*/
debug(msg)
{
_drivers.debug(this._nameHeader, msg);
}
/**
* Write an info level log message.
* @param {String} msg Message to write.
*/
info(msg)
{
_drivers.info(this._nameHeader, msg);
}
/**
* Write a warning level log message.
* @param {String} msg Message to write.
*/
warn(msg)
{
_drivers.warn(this._nameHeader, msg);
if (this._throwErrors) {
throw new Error(msg);
}
}
/**
* Write an error level log message.
* @param {String} msg Message to write.
*/
error(msg)
{
_drivers.error(this._nameHeader, msg);
if (this._throwErrors) {
throw new Error(msg);
}
}
/**
* Set logger to throw an error every time a log message with severity higher than warning is written.
* @param {Boolean} enable Set to true to throw error on warnings.
*/
throwErrorOnWarnings(enable)
{
this._throwErrors = Boolean(enable);
}
}
/**
* Null logger drivers to silent logs.
* @private
*/
class NullDrivers
{
/**
* @private
*/
constructor()
{
}
trace(msg)
{
}
debug(msg)
{
}
info(msg)
{
}
warn(msg)
{
}
error(msg)
{
}
}
// cached loggers
const _cachedLoggers = {};
/**
* The Logger module is a small object to get loggers and control the underlying logger drivers.
*/
const LoggerModule = {
/**
* Get a logger object for a given logger name.
* @param {String} name Logger name.
* @returns {Logger} Logger to use.
*/
getLogger: function(name)
{
if (!_cachedLoggers[name]) {
_cachedLoggers[name] = new Logger(name);
}
return _cachedLoggers[name];
},
/**
* Silent the logger.
*/
silent: function() {
_drivers = new NullDrivers();
},
/**
* Set log drivers that implement trace, debug, info, warn and error that all loggers will use.
*/
setDrivers: function(drivers)
{
_drivers = drivers;
},
/**
* Set logger application name.
* @param {String} name Set application name to replace the 'Shaku' in the headers.
*/
setApplicationName: function(name)
{
_application = name;
return this;
}
};
// export the logger module object.
module.exports = LoggerModule;