Skip to content

Instantly share code, notes, and snippets.

@tiblu
Created April 12, 2017 09:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tiblu/6db15ab2f141b5b574432fd193ae63f8 to your computer and use it in GitHub Desktop.
Save tiblu/6db15ab2f141b5b574432fd193ae63f8 to your computer and use it in GitHub Desktop.
GoogleAppScript - Logger
/**
* LOG
*
* Basic HTTP logger.
*/
var Logger = function() {
var _LEVELS = {
DEBUG: 1,
INFO: 2,
ERROR: 3
}
/**
* Get Logger instance
*
* @param {string} appId Application ID that will be attached to each log line.
* @param {string} serviceUrl Your service url. Supports basic auth: http(s)://user:pass@mydomain.com/log.
*/
var _getLogger = function (appId, serviceUrl) {
if(!appId || !serviceUrl) {
throw 'Invalid parameters: cannot initialize Log without appId and serviceUrl';
}
var _enabled = true; // Will actually do logging or not. Currently all or nothing switch. Future may bring levels.
var _level = _LEVELS.INFO; // Level >= that will be logged.
var basicAuthRegexp = /(http(s)?:)\/\/(\w*):(\w*)@(.*)/;
var basicAuthCredentials = basicAuthRegexp.exec(serviceUrl);
var _headers = {
'User-Agent': 'Google Script Logger Library',
'Content-Type': 'application/json'
};
if (basicAuthCredentials && basicAuthCredentials.length >= 4) {
var username = basicAuthCredentials[3];
var password = basicAuthCredentials[4];
serviceUrl = basicAuthCredentials[1] + basicAuthCredentials[5]; //protocol + url
_headers['Authorization'] = 'Basic ' + Utilities.base64Encode(username + ':' + password);
}
var _setEnabled = function (isLogging) {
if(typeof isLogging !== 'boolean') {
return;
}
_enabled = isLogging;
}
var _setLevel = function(level) {
_level = level;
};
/**
* Translate level ID to String value.
*
* @param {integer} Integer value of level
*
* @return {string} String value of level
*/
var _getLevelByValue = function(value) {
if(!value) return;
for(var key in _LEVELS) {
if(_LEVELS[key] == value) {
return key;
}
}
};
var _debug = function() {
_log(_LEVELS.DEBUG, arguments);
};
var _info = function() {
_log(_LEVELS.INFO, arguments);
};
var _error = function() {
_log(_LEVELS.ERROR, arguments);
}
var _log = function(level, msgs) {
if (!_enabled || level < _level) return;
var data = [];
Object.keys(msgs).forEach(function(key) {
data.push(msgs[key]);
});
var payload = {
level: _getLevelByValue(level),
appId: appId.trim(),
data: data
}
var options = {
method: 'post',
payload: JSON.stringify(payload),
headers: _headers
};
var response = UrlFetchApp.fetch(serviceUrl, options);
};
return {
debug: _debug,
info: _info,
error: _error,
setEnabled: _setEnabled,
setLevel: _setLevel
}
}
return {
getLogger: _getLogger,
LEVEL: _LEVELS
}
}();
function test_() {
var serviceUrl = 'https://webhook.logentries.com/noformat/logs/YOUR_LOGENTRIES_TOKEN_HERE';
var Log = Logger.getLogger('Lib.Log.test_', serviceUrl);
var Log2 = Logger.getLogger('Lib.Log2.test_', serviceUrl);
Log.debug('DEBUG');
Log.info('INFO');
Log.error('ERROR')
Log.setEnabled(false);
Log.info('DEBUG - Should not log');
Log.setEnabled(true);
Log.info('DEBUG - Should log');
Log.setLevel(Logger.LEVEL.DEBUG);
Log.debug('DEBUG - Should log due to logger level');
Log.setLevel(Logger.LEVEL.ERROR);
Log.debug('DEBUG - Should not log');
Log.info('INFO - Should not log');
Log.error('ERROR - SHOULD log');
Log2.info('INFO - should log');
Log2.info('INFO - one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message' +
'one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message one hell of a long message'
);
Log2.info('INFO - multidim array', [['a',3],['asd',1]], {a: 'a', c: 'c', d: 'd'});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment