remex/libs/logger.js

153 lines
3.5 KiB
JavaScript
Raw Normal View History

2022-03-15 01:36:47 +01:00
const moment = require('moment');
2022-02-02 17:07:16 +01:00
// constants
2022-03-15 01:36:47 +01:00
const LOG_PREFIX_DEBUG = 'debug';
const LOG_PREFIX_INFO = 'info';
const LOG_PREFIX_WARNING = 'warning';
const LOG_PREFIX_ERROR = 'error';
2022-02-02 17:07:16 +01:00
const LOGLEVEL_DEBUG = 0;
const LOGLEVEL_INFO = 1;
const LOGLEVEL_WARNING = 2;
const LOGLEVEL_ERROR = 3;
2022-03-15 01:36:47 +01:00
let loglevel;
let timestamp;
initialize();
function initialize(loglevel, timestamp) {
setLogLevel(loglevel || global.config?.log?.level);
setTimestamp(timestamp || global.config?.log?.timestamp);
}
// set the loglevel
function setLogLevel(value) {
switch (value) {
2022-02-02 17:07:16 +01:00
case LOG_PREFIX_DEBUG:
case LOGLEVEL_DEBUG:
2022-03-15 01:36:47 +01:00
loglevel = LOGLEVEL_DEBUG;
break;
2022-02-02 17:07:16 +01:00
case LOG_PREFIX_INFO:
case LOGLEVEL_INFO:
2022-03-15 01:36:47 +01:00
loglevel = LOGLEVEL_INFO;
break;
2022-02-02 17:07:16 +01:00
case LOG_PREFIX_WARNING:
case LOGLEVEL_WARNING:
2022-03-15 01:36:47 +01:00
loglevel = LOGLEVEL_WARNING;
break;
2022-02-02 17:07:16 +01:00
case LOG_PREFIX_ERROR:
case LOGLEVEL_ERROR:
2022-03-15 01:36:47 +01:00
loglevel = LOGLEVEL_ERROR;
break;
2022-02-02 17:07:16 +01:00
default:
2022-03-15 01:36:47 +01:00
loglevel = LOGLEVEL_INFO;
break;
2022-02-02 17:07:16 +01:00
}
2022-03-15 01:36:47 +01:00
}
// get the timestamp format
function setTimestamp(value) {
timestamp = value || 'DD.MM.YYYY HH:mm:ss:SS';
}
2022-02-02 17:07:16 +01:00
2022-03-15 01:36:47 +01:00
// log a http request - response object
function http(object) {
if (object === undefined) {
return;
}
let message = '[' + object.request.method + ':' + object.code + '] url: \'' + object.request.url + '\'';
2022-02-02 17:07:16 +01:00
let counter = 1;
2022-03-15 01:36:47 +01:00
for (let param in object.request.body) {
message += ', parameter ' + counter + ': \'' + param + '=' + object.request.body[param] + '\'';
2022-02-02 17:07:16 +01:00
counter++;
}
2022-03-15 01:36:47 +01:00
if (object.request.timestamp) {
message += ' > ' + (new Date().getTime() - object.request.timestamp) + 'ms';
}
if (object.data) {
message += ' > data: ' + object.data;
}
if (object.code != 200) {
error(message.trim());
return;
}
2022-02-02 17:07:16 +01:00
debug(message.trim());
}
2022-03-15 01:36:47 +01:00
// prefix log with 'info'
2022-02-02 17:07:16 +01:00
function info(message) {
if (loglevel > LOGLEVEL_INFO) {
return;
}
trace(message);
}
2022-03-15 01:36:47 +01:00
// prefix log with 'info'
2022-02-02 17:07:16 +01:00
function warn(message) {
if (loglevel > LOGLEVEL_WARNING) {
return;
}
2022-03-15 01:36:47 +01:00
trace(message, 'warning');
2022-02-02 17:07:16 +01:00
}
2022-03-15 01:36:47 +01:00
// prefix log with 'debug'
2022-02-02 17:07:16 +01:00
function debug(message) {
if (loglevel > LOGLEVEL_DEBUG) {
return;
}
2022-03-15 01:36:47 +01:00
trace(message, 'debug');
2022-02-02 17:07:16 +01:00
}
2022-03-15 01:36:47 +01:00
// prefix log with 'error'
2022-02-02 17:07:16 +01:00
function error(message) {
if (loglevel > LOGLEVEL_ERROR) {
return;
}
2022-03-15 01:36:47 +01:00
if (message.stack) {
trace(message.stack, 'error');
return;
}
if (message.errors !== undefined) {
for (let index = 0; index < message.errors.length; index++) {
trace(message.errors[index], 'error');
}
return;
}
2022-03-17 16:51:36 +01:00
trace(message.toString(), 'error');
2022-02-02 17:07:16 +01:00
}
// default logging function
function trace(message, prefix) {
if (message === undefined || message === null || message.length === 0) {
return;
}
if (prefix === undefined || prefix === null || prefix.length === 0) {
2022-03-15 01:36:47 +01:00
prefix = 'info';
2022-02-02 17:07:16 +01:00
}
let print;
switch (prefix) {
2022-03-15 01:36:47 +01:00
case 'error':
2022-02-02 17:07:16 +01:00
print = console.error;
break;
2022-03-15 01:36:47 +01:00
case 'debug':
2022-02-02 17:07:16 +01:00
print = console.debug;
break;
2022-03-15 01:36:47 +01:00
case 'warning':
2022-02-02 17:07:16 +01:00
print = console.warn;
break;
default:
print = console.log;
}
2022-03-15 01:36:47 +01:00
message = moment().format(timestamp) + ' | ' + prefix + ' > ' + message;
2022-02-02 17:07:16 +01:00
print(message);
}
// exports
module.exports = {
2022-03-15 01:36:47 +01:00
initialize,
2022-02-02 17:07:16 +01:00
info,
warn,
debug,
error,
2022-03-15 01:36:47 +01:00
http
}