Created
April 12, 2017 09:30
-
-
Save tiblu/6db15ab2f141b5b574432fd193ae63f8 to your computer and use it in GitHub Desktop.
GoogleAppScript - Logger
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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