turtlecoin-wallet-backend
Version:
[](https://travis-ci.org/turtlecoin/turtlecoin-wallet-backend-js)
146 lines (145 loc) • 4.39 kB
JavaScript
// Copyright (C) 2018, Zpalmtree
//
// Please see the included LICENSE file for more information.
Object.defineProperty(exports, "__esModule", { value: true });
class Logger {
constructor(level, callback) {
/**
* Level to log at
*/
this.logLevel = LogLevel.DISABLED;
if (level) {
this.logLevel = level;
}
}
/**
* @param message The message to log
* @param level The level to log at
* @param categories The category or categories this message belongs to, if any
*
* Logs a message either to console.log, or the callback if defined
*/
log(message, level, categories) {
if (level === LogLevel.DISABLED) {
throw new Error('You cannot log at the "DISABLED" level!');
}
if (!categories) {
categories = [];
}
else if (!Array.isArray(categories)) {
categories = [categories];
}
const date = new Date().toUTCString();
let output = `[${date}] [${logLevelToString(level)}]`;
for (const category of categories) {
output += ` [${logCategoryToString(category)}]`;
}
output += `: ${message}`;
if (level >= this.logLevel) {
/* If the user provides a callback, log to that instead */
if (this.callback) {
this.callback(output, message, level, categories);
}
else {
console.log(output);
}
}
}
/**
* Sets the log level. Log messages below this level are not shown.
*/
setLogLevel(logLevel) {
this.logLevel = logLevel;
}
/**
* @param callback The callback to use for log messages
* @param callback.prettyMessage A nicely formatted log message, with timestamp, levels, and categories
* @param callback.message The raw log message
* @param callback.level The level at which the message was logged at
* @param callback.categories The categories this log message falls into
*
* Sets a callback to be used instead of console.log for more fined control
* of the logging output.
*
* Usage:
* ```
* wallet.setLoggerCallback((prettyMessage, message, level, categories) => {
* if (categories.includes(LogCategory.SYNC)) {
* console.log(prettyMessage);
* }
* });
* ```
*
*/
setLoggerCallback(callback) {
this.callback = callback;
}
}
/**
* Levels to log at
*/
var LogLevel;
(function (LogLevel) {
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
LogLevel[LogLevel["INFO"] = 1] = "INFO";
LogLevel[LogLevel["WARNING"] = 2] = "WARNING";
LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
LogLevel[LogLevel["DISABLED"] = 4] = "DISABLED";
})(LogLevel = exports.LogLevel || (exports.LogLevel = {}));
/**
* Convert a log level to a string
*/
function logLevelToString(level) {
switch (level) {
case LogLevel.DISABLED: {
return 'Disabled';
}
case LogLevel.DEBUG: {
return 'Debug';
}
case LogLevel.INFO: {
return 'Info';
}
case LogLevel.WARNING: {
return 'Warning';
}
case LogLevel.ERROR: {
return 'Error';
}
}
}
/**
* Possible categories log messages can be in
*/
var LogCategory;
(function (LogCategory) {
LogCategory[LogCategory["SYNC"] = 0] = "SYNC";
LogCategory[LogCategory["TRANSACTIONS"] = 1] = "TRANSACTIONS";
LogCategory[LogCategory["FILESYSTEM"] = 2] = "FILESYSTEM";
LogCategory[LogCategory["SAVE"] = 3] = "SAVE";
LogCategory[LogCategory["DAEMON"] = 4] = "DAEMON";
})(LogCategory = exports.LogCategory || (exports.LogCategory = {}));
/**
* Convert a log category to a string
*/
function logCategoryToString(category) {
switch (category) {
case LogCategory.SYNC: {
return 'Sync';
}
case LogCategory.TRANSACTIONS: {
return 'Transactions';
}
case LogCategory.FILESYSTEM: {
return 'Filesystem';
}
case LogCategory.SAVE: {
return 'Save';
}
case LogCategory.DAEMON: {
return 'Daemon';
}
}
}
exports.logger = new Logger();
;