-
-
Save sivakumar-kailasam/5a92434a61d6e9c8b2a1 to your computer and use it in GitHub Desktop.
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
/* | |
Example usage: | |
import logger from "app/system/logger"; | |
var LOG = logger.loggerFor("topic"'); | |
LOG.log({ | |
event: "data received", | |
secondary: { | |
resource: "photo", | |
requestId: "1234" | |
}, | |
args: payload | |
}); | |
*/ | |
var DATE_FORMAT = 'MM/DD HH:mm:ss'; | |
var FONT_WEIGHT_NORMAL = "font-weight: normal;"; | |
var FONT_WEIGHT_BOLD = "font-weight: bold;"; | |
var COLOR_PURPLE = "color: purple;"; | |
var COLOR_RED = "color: red;"; | |
var COLOR_GREEN = "color: green;"; | |
var COLOR_BLUE = "color: blue;"; | |
function logFormatted(name, type, message, additional) { | |
var output = [], style = []; | |
var date = moment().format(DATE_FORMAT); | |
// Timestamp | |
output.push("%c[" + date +"] "); | |
if (type === "error") { | |
style.push(FONT_WEIGHT_BOLD + COLOR_RED); | |
} else { | |
style.push(FONT_WEIGHT_NORMAL); | |
} | |
// Name | |
output.push("%c" + name + " "); | |
style.push(FONT_WEIGHT_NORMAL + COLOR_PURPLE); | |
if (typeof message === 'string') { | |
// Simple Message | |
output.push("%c" + message); | |
style.push(FONT_WEIGHT_NORMAL); | |
} else { | |
// Structured Message | |
// Event Name | |
output.push("%c" + message.event); | |
style.push(FONT_WEIGHT_NORMAL + COLOR_RED); | |
// Secondary Information | |
var secondary = normalizeSecondary(message.secondary); | |
for (var idx = 0; idx < secondary.length; idx += 2) { | |
output.push(" %c" + secondary[idx]); | |
style.push(FONT_WEIGHT_NORMAL + COLOR_GREEN); | |
output.push("%c="); | |
style.push(FONT_WEIGHT_NORMAL); | |
output.push("%c" + secondary[idx+1]); | |
style.push(FONT_WEIGHT_NORMAL + COLOR_BLUE); | |
} | |
} | |
output = [output.join('')].concat(style); | |
var args = message.args; | |
if (args && args.length) { | |
console.groupCollapsed.apply(console, output); | |
console.log.apply(console, args); | |
console.groupEnd(); | |
} else { | |
console.log.apply(console, output); | |
} | |
if (additional) { console.log(additional); } | |
} | |
function normalizeSecondary(secondary) { | |
if (Ember.typeOf(secondary) === 'array') { | |
Ember.assert("Secondary arguments passed to the logger must have an even number of items. For example, ['foo=', bar].", secondary.length % 2 === 0); | |
return secondary; | |
} | |
var array = []; | |
for (var key in secondary) { | |
array.push(key); | |
array.push(secondary[key]); | |
} | |
return array; | |
} | |
var Logger = Ember.Object.extend({ | |
history: null, | |
verbose: false, | |
sendReports: true, | |
name: "default", | |
loggerFor: function(name) { | |
return Logger.create({ | |
parent: this, | |
name: name | |
}); | |
}, | |
setup: function() { | |
this.history = []; | |
this._log('useragent', window.navigator.userAgent); | |
return this; | |
}, | |
log: function(message) { | |
this._log('info', message); | |
}, | |
warn: function(message) { | |
this._log('warning', message); | |
}, | |
error: function(message) { | |
this._log('error', message); | |
}, | |
exception: function(error) { | |
var stacktrace = printStackTrace({ e: error }); | |
this._log('exception', error.message, { exception: error, trace: stacktrace }); | |
}, | |
report: function() { | |
if (!this.sendReports) { return; } | |
if (this.verbose) { console.log("Sending report to server."); } | |
return $.ajax('/internal/error.json', { | |
type: 'POST', | |
contentType: 'application/json', | |
data: JSON.stringify({ | |
error: { | |
history: this.history | |
} | |
}), | |
context: this, | |
success: function() { | |
if (this.verbose) { console.log("Report sent successfully."); } | |
}, | |
error: function() { | |
this.error("Unable to send error report to server."); | |
console.error("Unable to send error report to server."); | |
} | |
}); | |
}, | |
reportError: function(error) { | |
this.exception(error); | |
return this.report(); | |
}, | |
_log: function(type, message, additional, name) { | |
var parent = this.get('parent'); | |
if (!name) { | |
name = this.get('name'); | |
} | |
if (parent) { | |
parent._log(type, message, additional, name); | |
return; | |
} | |
var date = new Date(); | |
var item = { | |
name: name, | |
dateStr: date.toString(), | |
timestamp: date.getTime(), | |
type: type, | |
message: message | |
}; | |
if (additional) { | |
$.extend(item, additional); | |
} | |
this.history.push(item); | |
if (this.verbose) { | |
logFormatted(name, type, message, additional); | |
} | |
}, | |
}); | |
var logger = Logger.create().setup(); | |
export default logger; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment