diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..40b878d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+node_modules/
\ No newline at end of file
diff --git a/Gruntfile.js b/Gruntfile.js
index 1abb4c8..410d119 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -7,7 +7,7 @@ module.exports = function (grunt) {
},
main : {
files : {
- 'src/loggly.tracker-2.1.min.js' : ['src/loggly.tracker.js']
+ 'src/loggly.tracker-2.2.min.js' : ['src/loggly.tracker.js']
}
}
}
diff --git a/README.md b/README.md
index 2058965..01613a4 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
loggly-jslogger
===============
-Client-side (browser) logger to use with Loggly gen2. Check out Loggly's [Javascript logging documentation](https://www.loggly.com/docs/javascript/) to learn more.
+Client-side (browser) logger to use with Loggly gen2. Check out Loggly's [Javascript logging documentation](https://www.loggly.com/docs/javascript/) to learn more.
Installation
------------
@@ -48,7 +48,7 @@ myBetterLogger.push({'logglyKey': 'your-customer-token' }); // push a loggly ke
Send Console Errors to Loggly
----
-Keeping sendConsoleErrors value to true will send all the unhandled errors to the Loggly with the detailed information like error message, URL, line number and column number. This script also take cares of all the previously defined window.onerror functions.
+Keeping sendConsoleErrors value to true will send all the unhandled errors to the Loggly with the detailed information like error message, URL, line number and column number. This script also take cares of all the previously defined window.onerror functions.
Send Tags to Loggly
----
@@ -90,3 +90,17 @@ location /loggly/ {
proxy_pass http://logs-01.loggly.com;
}
```
+
+Force HTTPS
+----
+
+If you don't want Loggly to detect what protocol to use and enforce https
+
+```Javascript
+_LTracker.push({
+ 'logglyKey': 'your-customer-token',
+ 'sendConsoleErrors' : true,
+ 'tag' : 'javascript-logs',
+ 'forceHTTPS':false
+});
+```
\ No newline at end of file
diff --git a/bower.json b/bower.json
index a389243..61ccd70 100644
--- a/bower.json
+++ b/bower.json
@@ -5,9 +5,9 @@
"_target": "*",
"_originalSource": "loggly-jslogger",
"_direct": true,
- "version": "3.0.0",
+ "version": "3.1.0",
"description": "A Javascript client to send logs to Loggly.",
- "main": "src/loggly.tracker.js",
+ "main": "src/loggly.tracker-2.2.min.js",
"keywords": [
"loggly-jslogger",
"jslogger",
diff --git a/package.json b/package.json
index 6dfae91..cf12751 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "loggly-jslogger",
- "version": "2.1.0",
+ "version": "2.2.1",
"description": "A Javascript client to send logs to Loggly.",
"browser": "index.js",
"repository": {
@@ -12,7 +12,7 @@
"loggly-jslogger",
"jslogger",
"loggly",
- "log"
+ "log"
],
"license": "MIT",
"devDependencies": {
diff --git a/src/loggly.tracker-2.2.min.js b/src/loggly.tracker-2.2.min.js
new file mode 100644
index 0000000..0edd5c0
--- /dev/null
+++ b/src/loggly.tracker-2.2.min.js
@@ -0,0 +1,2 @@
+!function(a,b){function c(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"==a?b:3&b|8;return c.toString(16)})}function d(){this.key=!1,this.sendConsoleErrors=!1,this.tag="jslogger",this.useDomainProxy=!1,this.forceHTTPS=!1}function e(a,b){a.key=b,a.setSession(),j(a)}function f(a,b){a.tag=b}function g(a,b){a.forceHTTPS=b}function h(a,b){a.useDomainProxy=b,j(a)}function i(b,c){if(b.sendConsoleErrors=c,b.sendConsoleErrors===!0){var d=a.onerror;a.onerror=function(c,e,f,g){b.push({category:"BrowserJsException",exception:{message:c,url:e,lineno:f,colno:g}}),d&&"function"==typeof d&&d.apply(a,arguments)}}}function j(b){1==b.useDomainProxy?b.inputUrl=k(b)+a.location.host+"/"+o+"/inputs/"+b.key+"/tag/"+b.tag:b.inputUrl=k(b)+(b.logglyCollectorDomain||l)+"/inputs/"+b.key+"/tag/"+b.tag}function k(a){return"http"+("https:"===b.location.protocol||a.forceHTTPS?"s":"")+"://"}var l="logs-01.loggly.com",m="logglytrackingsession",n=m.length+1,o="loggly";d.prototype={setSession:function(a){a?(this.session_id=a,this.setCookie(this.session_id)):this.session_id||(this.session_id=this.readCookie(),this.session_id||(this.session_id=c(),this.setCookie(this.session_id)))},push:function(a){var b=typeof a;if(a&&("object"===b||"string"===b)){var c=this;if("string"===b)a={text:a};else{if(a.logglyCollectorDomain)return void(c.logglyCollectorDomain=a.logglyCollectorDomain);if(void 0!==a.sendConsoleErrors&&i(c,a.sendConsoleErrors),a.tag&&f(c,a.tag),a.forceHTTPS&&g(c,a.forceHTTPS),a.useDomainProxy&&h(c,a.useDomainProxy),a.logglyKey)return void e(c,a.logglyKey);if(a.session_id)return void c.setSession(a.session_id)}c.key&&c.track(a)}},track:function(b){b.sessionId=this.session_id;try{var c=new XMLHttpRequest;c.open("POST",this.inputUrl,!0),c.setRequestHeader("Content-Type","text/plain"),c.send(JSON.stringify(b))}catch(c){a&&a.console&&"function"==typeof a.console.log&&(console.log("Failed to log to loggly because of this exception:\n"+c),console.log("Failed log data:",b))}},readCookie:function(){var a=b.cookie,c=a.indexOf(m);if(c<0)return!1;var d=a.indexOf(";",c+1);return d=d<0?a.length:d,a.slice(c+n,d)},setCookie:function(a){b.cookie=m+"="+a}};var p=a._LTracker,q=new d;if(p&&p.length){var r=0,s=p.length;for(r=0;r http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
return v.toString(16);
- });
+ });
}
-
+
function LogglyTracker() {
this.key = false;
- this.sendConsoleErrors = false;
+ this.sendConsoleErrors = false;
this.tag = 'jslogger';
this.useDomainProxy = false;
+ this.forceHTTPS = false;
}
-
+
function setKey(tracker, key) {
tracker.key = key;
tracker.setSession();
setInputUrl(tracker);
}
-
- function setTag(tracker, tag){
- tracker.tag = tag;
- }
-
+
+ function setTag(tracker, tag){
+ tracker.tag = tag;
+ }
+
+ function setForceHTTPS(tracker, forceHTTPS){
+ tracker.forceHTTPS = forceHTTPS;
+ }
+
function setDomainProxy(tracker, useDomainProxy){
tracker.useDomainProxy = useDomainProxy;
//refresh inputUrl value
setInputUrl(tracker);
}
-
+
function setSendConsoleError(tracker, sendConsoleErrors) {
tracker.sendConsoleErrors = sendConsoleErrors;
-
+
if(tracker.sendConsoleErrors === true){
var _onerror = window.onerror;
//send console error messages to Loggly
window.onerror = function (msg, url, line, col){
- tracker.push({
+ tracker.push({
category: 'BrowserJsException',
exception: {
message: msg,
@@ -52,36 +56,40 @@
colno: col,
}
});
-
+
if (_onerror && typeof _onerror === 'function') {
_onerror.apply(window, arguments);
}
};
}
}
-
+
function setInputUrl(tracker) {
-
+
if(tracker.useDomainProxy == true){
- tracker.inputUrl = LOGGLY_INPUT_PREFIX
+ tracker.inputUrl = getInputPrefix(tracker)
+ window.location.host
+ '/'
+ LOGGLY_PROXY_DOMAIN
+ '/inputs/'
- + tracker.key
+ + tracker.key
+ '/tag/'
+ tracker.tag;
}
else{
- tracker.inputUrl = LOGGLY_INPUT_PREFIX
+ tracker.inputUrl = getInputPrefix(tracker)
+ (tracker.logglyCollectorDomain || LOGGLY_COLLECTOR_DOMAIN)
+ '/inputs/'
- + tracker.key
+ + tracker.key
+ '/tag/'
+ tracker.tag;
}
}
-
+
+ function getInputPrefix(tracker){
+ return 'http' + ('https:' === document.location.protocol || tracker.forceHTTPS ? 's' : '') + '://';
+ }
+
LogglyTracker.prototype = {
setSession: function(session_id) {
if(session_id) {
@@ -97,14 +105,14 @@
},
push: function(data) {
var type = typeof data;
-
+
if( !data || !(type === 'object' || type === 'string') ) {
return;
}
-
+
var self = this;
-
-
+
+
if(type === 'string') {
data = {
'text': data
@@ -114,49 +122,53 @@
self.logglyCollectorDomain = data.logglyCollectorDomain;
return;
}
-
- if(data.sendConsoleErrors !== undefined) {
- setSendConsoleError(self, data.sendConsoleErrors);
+
+ if(data.sendConsoleErrors !== undefined) {
+ setSendConsoleError(self, data.sendConsoleErrors);
}
-
- if(data.tag) {
+
+ if(data.tag) {
setTag(self, data.tag);
}
-
- if(data.useDomainProxy){
+
+ if(data.forceHTTPS) {
+ setForceHTTPS(self, data.forceHTTPS);
+ }
+
+ if(data.useDomainProxy){
setDomainProxy(self, data.useDomainProxy);
}
-
+
if(data.logglyKey) {
setKey(self, data.logglyKey);
return;
}
-
+
if(data.session_id) {
self.setSession(data.session_id);
return;
}
}
-
+
if(!self.key) {
return;
}
-
+
self.track(data);
-
-
+
+
},
track: function(data) {
// inject session id
data.sessionId = this.session_id;
-
+
try {
//creating an asynchronous XMLHttpRequest
var xmlHttp = new XMLHttpRequest();
- xmlHttp.open('POST', this.inputUrl, true); //true for asynchronous request
- xmlHttp.setRequestHeader('Content-Type', 'text/plain');
- xmlHttp.send(JSON.stringify(data));
-
+ xmlHttp.open('POST', this.inputUrl, true); //true for asynchronous request
+ xmlHttp.setRequestHeader('Content-Type', 'text/plain');
+ xmlHttp.send(JSON.stringify(data));
+
} catch (ex) {
if (window && window.console && typeof window.console.log === 'function') {
console.log("Failed to log to loggly because of this exception:\n" + ex);
@@ -182,11 +194,11 @@
document.cookie = LOGGLY_SESSION_KEY + '=' + value;
}
};
-
+
var existing = window._LTracker;
-
+
var tracker = new LogglyTracker();
-
+
if(existing && existing.length ) {
var i = 0,
eLength = existing.length;
@@ -194,9 +206,9 @@
tracker.push(existing[i]);
}
}
-
+
window._LTracker = tracker; // default global tracker
-
+
window.LogglyTracker = LogglyTracker; // if others want to instantiate more than one tracker
-
+
})(window, document);