Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save billywhizz/880300 to your computer and use it in GitHub Desktop.
Save billywhizz/880300 to your computer and use it in GitHub Desktop.
add unix-dgram option to ain
From 5f933b1df831f94f9003375a6ed578896506c3e4 Mon Sep 17 00:00:00 2001
From: Andrew Johnston <[email protected]>
Date: Mon, 21 Mar 2011 21:50:15 +0000
Subject: [PATCH] added option for tcp or unix_dgram syslogging
---
index.js | 469 ++++++++++++++++++++++++++++++++------------------------------
1 files changed, 243 insertions(+), 226 deletions(-)
diff --git a/index.js b/index.js
index a47ca64..1b58289 100644
--- a/index.js
+++ b/index.js
@@ -1,227 +1,244 @@
-var dgram = require('dgram');
-var Buffer = require('buffer').Buffer;
-
-var Facility = {
- kern: 0,
- user: 1,
- mail: 2,
- daemon: 3,
- auth: 4,
- syslog: 5,
- lpr: 6,
- news: 7,
- uucp: 8,
- local0: 16,
- local1: 17,
- local2: 18,
- local3: 19,
- local4: 20,
- local5: 21,
- local6: 22,
- local7: 23
-};
-
-var Severity = {
- emerg: 0,
- alert: 1,
- crit: 2,
- err: 3,
- warn: 4,
- notice: 5,
- info: 6,
- debug: 7
-};
-
-// Format RegExp
-var formatRegExp = /%[sdj]/g;
-/**
- * Just copy from node.js console
- * @param f
- * @returns
- */
-function format(f) {
- if (typeof f !== 'string') {
- var objects = [], util = require('util');
- for (var i = 0; i < arguments.length; i++) {
- objects.push(util.inspect(arguments[i]));
- }
- return objects.join(' ');
- }
-
- var i = 1;
- var args = arguments;
- var str = String(f).replace(formatRegExp, function(x) {
- switch (x) {
- case '%s': return args[i++];
- case '%d': return +args[i++];
- case '%j': return JSON.stringify(args[i++]);
- default:
- return x;
- }
- });
- for (var len = args.length; i < len; ++i) {
- str += ' ' + args[i];
- }
- return str;
-}
-
-function leadZero(n) {
- if (n < 10) {
- return '0' + n;
- } else {
- return n;
- }
-}
-
-/**
- * Get current date in syslog format. Thanks https://github.com/kordless/lodge
- * @returns {String}
- */
-function getDate() {
- var dt = new Date();
- var hours = leadZero(dt.getHours());
- var minutes = leadZero(dt.getMinutes());
- var seconds = leadZero(dt.getSeconds());
- var month = dt.getMonth();
- var day = dt.getDate();
- (day < 10) && (day = ' ' + day);
- var months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug',
- 'Sep', 'Oct', 'Nov', 'Dec' ];
- return months[month] + " " + day + " " + hours + ":" + minutes
- + ":" + seconds;
-}
-
-/**
- * Syslog logger
- * @constructor
- * @returns {SysLogger}
- */
-function SysLogger() {
- this._times = {};
-}
-
-/**
- * Init function. All arguments is optional
- * @param {String} tag By default is __filename
- * @param {Facility|Number|String} By default is "user"
- * @param {String} hostname By default is "localhost"
- */
-SysLogger.prototype.set = function(tag, facility, hostname) {
- this.setTag(tag);
- this.setFacility(facility);
- this.setHostname(hostname);
-
- return this;
-};
-
-SysLogger.prototype.setTag = function(tag) {
- this.tag = tag || __filename;
- return this;
-};
-SysLogger.prototype.setFacility = function(facility) {
- this.facility = facility || Facility.user;
- if (typeof this.facility == 'string')
- this.facility = Facility[this.facility];
- return this;
-};
-SysLogger.prototype.setHostname = function(hostname) {
- this.hostname = hostname || 'localhost';
- return this;
-};
-
-/**
- * Get new instance of SysLogger. All arguments is similar as `set`
- * @returns {SysLogger}
- */
-SysLogger.prototype.get = function() {
- var newLogger = new SysLogger();
- newLogger.set.apply(newLogger, arguments);
- return newLogger;
-};
-/**
- * Send message
- * @param {String} message
- * @param {Severity} severity
- */
-SysLogger.prototype._send = function(message, severity) {
- var client = dgram.createSocket('udp4');
- var message = new Buffer('<' + (this.facility * 8 + severity) + '>' +
- getDate() + ' ' + this.hostname + ' ' +
- this.tag + '[' + process.pid + ']:' + message);
- client.send(message, 0, message.length, 514, '127.0.0.1',
- function(err) {
- if (err) console.error('Can\'t connect to localhost:514');
- });
- client.close();
-};
-
-/**
- * Send formatted message to syslog
- * @param {String} message
- * @param {Number|String} severity
- */
-SysLogger.prototype.send = function(message, severity) {
- severity = severity || Severity.notice;
- if (typeof severity == 'string') severity = Severity[severity];
- this._send(message, severity);
-};
-
-/**
- * Send log message with notice severity.
- */
-SysLogger.prototype.log = function() {
- this._send(format.apply(this, arguments), Severity.notice);
-};
-/**
- * Send log message with info severity.
- */
-SysLogger.prototype.info = function() {
- this._send(format.apply(this, arguments), Severity.info);
-};
-/**
- * Send log message with warn severity.
- */
-SysLogger.prototype.warn = function() {
- this._send(format.apply(this, arguments), Severity.warn);
-};
-/**
- * Send log message with err severity.
- */
-SysLogger.prototype.error = function() {
- this._send(format.apply(this, arguments), Severity.err);
-};
-
-/**
- * Log object with `util.inspect` with notice severity
- */
-SysLogger.prototype.dir = function(object) {
- var util = require('util');
- this._send(util.inspect(object) + '\n', Severity.notice);
-};
-
-SysLogger.prototype.time = function(label) {
- this._times[label] = Date.now();
-};
-SysLogger.prototype.timeEnd = function(label) {
- var duration = Date.now() - this._times[label];
- this.log('%s: %dms', label, duration);
-};
-
-SysLogger.prototype.trace = function(label) {
- var err = new Error;
- err.name = 'Trace';
- err.message = label || '';
- Error.captureStackTrace(err, arguments.callee);
- this.error(err.stack);
-};
-
-SysLogger.prototype.assert = function(expression) {
- if (!expression) {
- var arr = Array.prototype.slice.call(arguments, 1);
- this._send(format.apply(this, arr), Severity.err);
- }
-};
-
-var logger = new SysLogger();
-logger.set();
+var dgram = require('dgram');
+var Buffer = require('buffer').Buffer;
+
+var Facility = {
+ kern: 0,
+ user: 1,
+ mail: 2,
+ daemon: 3,
+ auth: 4,
+ syslog: 5,
+ lpr: 6,
+ news: 7,
+ uucp: 8,
+ local0: 16,
+ local1: 17,
+ local2: 18,
+ local3: 19,
+ local4: 20,
+ local5: 21,
+ local6: 22,
+ local7: 23
+};
+
+var Severity = {
+ emerg: 0,
+ alert: 1,
+ crit: 2,
+ err: 3,
+ warn: 4,
+ notice: 5,
+ info: 6,
+ debug: 7
+};
+
+// Format RegExp
+var formatRegExp = /%[sdj]/g;
+/**
+ * Just copy from node.js console
+ * @param f
+ * @returns
+ */
+function format(f) {
+ if (typeof f !== 'string') {
+ var objects = [], util = require('util');
+ for (var i = 0; i < arguments.length; i++) {
+ objects.push(util.inspect(arguments[i]));
+ }
+ return objects.join(' ');
+ }
+
+ var i = 1;
+ var args = arguments;
+ var str = String(f).replace(formatRegExp, function(x) {
+ switch (x) {
+ case '%s': return args[i++];
+ case '%d': return +args[i++];
+ case '%j': return JSON.stringify(args[i++]);
+ default:
+ return x;
+ }
+ });
+ for (var len = args.length; i < len; ++i) {
+ str += ' ' + args[i];
+ }
+ return str;
+}
+
+function leadZero(n) {
+ if (n < 10) {
+ return '0' + n;
+ } else {
+ return n;
+ }
+}
+
+/**
+ * Get current date in syslog format. Thanks https://github.com/kordless/lodge
+ * @returns {String}
+ */
+function getDate() {
+ var dt = new Date();
+ var hours = leadZero(dt.getHours());
+ var minutes = leadZero(dt.getMinutes());
+ var seconds = leadZero(dt.getSeconds());
+ var month = dt.getMonth();
+ var day = dt.getDate();
+ (day < 10) && (day = ' ' + day);
+ var months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug',
+ 'Sep', 'Oct', 'Nov', 'Dec' ];
+ return months[month] + " " + day + " " + hours + ":" + minutes
+ + ":" + seconds;
+}
+
+/**
+ * Syslog logger
+ * @constructor
+ * @returns {SysLogger}
+ */
+function SysLogger() {
+ this._times = {};
+ this._type = "udp4";
+}
+
+/**
+ * Init function. All arguments is optional
+ * @param {String} tag By default is __filename
+ * @param {Facility|Number|String} By default is "user"
+ * @param {String} hostname By default is "localhost"
+ * @param {String} type (tcp4 or unix_gram) By default is "tcp4"
+ */
+SysLogger.prototype.set = function(tag, facility, hostname, type) {
+ this.setTag(tag);
+ this.setFacility(facility);
+ this.setHostname(hostname);
+ this.setType(type);
+ return this;
+};
+
+SysLogger.prototype.setTag = function(tag) {
+ this.tag = tag || __filename;
+ return this;
+};
+SysLogger.prototype.setFacility = function(facility) {
+ this.facility = facility || Facility.user;
+ if (typeof this.facility == 'string')
+ this.facility = Facility[this.facility];
+ return this;
+};
+SysLogger.prototype.setHostname = function(hostname) {
+ this.hostname = hostname || 'localhost';
+ return this;
+};
+SysLogger.prototype.setType = function(type) {
+ this._type = type || 'tcp4';
+ return this;
+};
+
+/**
+ * Get new instance of SysLogger. All arguments is similar as `set`
+ * @returns {SysLogger}
+ */
+SysLogger.prototype.get = function() {
+ var newLogger = new SysLogger();
+ newLogger.set.apply(newLogger, arguments);
+ return newLogger;
+};
+/**
+ * Send message
+ * @param {String} message
+ * @param {Severity} severity
+ */
+SysLogger.prototype._send = function(message, severity) {
+ var message = new Buffer('<' + (this.facility * 8 + severity) + '>' +
+ getDate() + ' ' + this.hostname + ' ' +
+ this.tag + '[' + process.pid + ']:' + message);
+ switch(this._type) {
+ case "udp4":
+ var client = dgram.createSocket('udp4');
+ client.send(message, 0, message.length, 514, '127.0.0.1',
+ function(err) {
+ if (err) console.error('Can\'t connect to localhost:514');
+ });
+ break;
+ case "unix_dgram":
+ var client = dgram.createSocket('unix_dgram');
+ client.send(message, 0, message.length, "/dev/log",
+ function(err) {
+ if (err) console.error('Can\'t connect to /dev/log');
+ });
+ break;
+ }
+ client.close();
+};
+
+/**
+ * Send formatted message to syslog
+ * @param {String} message
+ * @param {Number|String} severity
+ */
+SysLogger.prototype.send = function(message, severity) {
+ severity = severity || Severity.notice;
+ if (typeof severity == 'string') severity = Severity[severity];
+ this._send(message, severity);
+};
+
+/**
+ * Send log message with notice severity.
+ */
+SysLogger.prototype.log = function() {
+ this._send(format.apply(this, arguments), Severity.notice);
+};
+/**
+ * Send log message with info severity.
+ */
+SysLogger.prototype.info = function() {
+ this._send(format.apply(this, arguments), Severity.info);
+};
+/**
+ * Send log message with warn severity.
+ */
+SysLogger.prototype.warn = function() {
+ this._send(format.apply(this, arguments), Severity.warn);
+};
+/**
+ * Send log message with err severity.
+ */
+SysLogger.prototype.error = function() {
+ this._send(format.apply(this, arguments), Severity.err);
+};
+
+/**
+ * Log object with `util.inspect` with notice severity
+ */
+SysLogger.prototype.dir = function(object) {
+ var util = require('util');
+ this._send(util.inspect(object) + '\n', Severity.notice);
+};
+
+SysLogger.prototype.time = function(label) {
+ this._times[label] = Date.now();
+};
+SysLogger.prototype.timeEnd = function(label) {
+ var duration = Date.now() - this._times[label];
+ this.log('%s: %dms', label, duration);
+};
+
+SysLogger.prototype.trace = function(label) {
+ var err = new Error;
+ err.name = 'Trace';
+ err.message = label || '';
+ Error.captureStackTrace(err, arguments.callee);
+ this.error(err.stack);
+};
+
+SysLogger.prototype.assert = function(expression) {
+ if (!expression) {
+ var arr = Array.prototype.slice.call(arguments, 1);
+ this._send(format.apply(this, arr), Severity.err);
+ }
+};
+
+var logger = new SysLogger();
+logger.set();
module.exports = logger;
\ No newline at end of file
--
1.7.2.3
From 66a522a2d40a284f62c7c670cb2085dc4b7567cb Mon Sep 17 00:00:00 2001
From: Andrew Johnston <[email protected]>
Date: Mon, 21 Mar 2011 21:59:06 +0000
Subject: [PATCH 2/2] fixed formatting
---
index.js | 30 +++++++++++++++---------------
1 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/index.js b/index.js
index 1b58289..1204870 100644
--- a/index.js
+++ b/index.js
@@ -112,7 +112,7 @@ SysLogger.prototype.set = function(tag, facility, hostname, type) {
this.setTag(tag);
this.setFacility(facility);
this.setHostname(hostname);
- this.setType(type);
+ this.setType(type);
return this;
};
@@ -154,20 +154,20 @@ SysLogger.prototype._send = function(message, severity) {
getDate() + ' ' + this.hostname + ' ' +
this.tag + '[' + process.pid + ']:' + message);
switch(this._type) {
- case "udp4":
- var client = dgram.createSocket('udp4');
- client.send(message, 0, message.length, 514, '127.0.0.1',
- function(err) {
- if (err) console.error('Can\'t connect to localhost:514');
- });
- break;
- case "unix_dgram":
- var client = dgram.createSocket('unix_dgram');
- client.send(message, 0, message.length, "/dev/log",
- function(err) {
- if (err) console.error('Can\'t connect to /dev/log');
- });
- break;
+ case "udp4":
+ var client = dgram.createSocket('udp4');
+ client.send(message, 0, message.length, 514, '127.0.0.1',
+ function(err) {
+ if (err) console.error('Can\'t connect to localhost:514');
+ });
+ break;
+ case "unix_dgram":
+ var client = dgram.createSocket('unix_dgram');
+ client.send(message, 0, message.length, '/dev/log',
+ function(err) {
+ if (err) console.error('Can\'t connect to /dev/log');
+ });
+ break;
}
client.close();
};
--
1.7.2.3
From b02a96e9bbecc4bf22a61c1ef85f1db96d82c2f2 Mon Sep 17 00:00:00 2001
From: Andrew Johnston <[email protected]>
Date: Mon, 21 Mar 2011 22:05:48 +0000
Subject: [PATCH 3/3] message format doesn't include hostname for unix_dgram
---
index.js | 9 ++++++---
1 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/index.js b/index.js
index 1204870..3bfac54 100644
--- a/index.js
+++ b/index.js
@@ -150,11 +150,11 @@ SysLogger.prototype.get = function() {
* @param {Severity} severity
*/
SysLogger.prototype._send = function(message, severity) {
- var message = new Buffer('<' + (this.facility * 8 + severity) + '>' +
- getDate() + ' ' + this.hostname + ' ' +
- this.tag + '[' + process.pid + ']:' + message);
switch(this._type) {
case "udp4":
+ var message = new Buffer('<' + (this.facility * 8 + severity) + '>' +
+ getDate() + ' ' + this.hostname + ' ' +
+ this.tag + '[' + process.pid + ']:' + message);
var client = dgram.createSocket('udp4');
client.send(message, 0, message.length, 514, '127.0.0.1',
function(err) {
@@ -162,6 +162,9 @@ SysLogger.prototype._send = function(message, severity) {
});
break;
case "unix_dgram":
+ var message = new Buffer('<' + (this.facility * 8 + severity) + '>' +
+ getDate() + ' ' +
+ this.tag + '[' + process.pid + ']:' + message);
var client = dgram.createSocket('unix_dgram');
client.send(message, 0, message.length, '/dev/log',
function(err) {
--
1.7.2.3
From 572f237d8de57c8f64ba8e98c48ed79faaa2559f Mon Sep 17 00:00:00 2001
From: Andrew Johnston <[email protected]>
Date: Mon, 21 Mar 2011 23:04:32 +0000
Subject: [PATCH 4/4] moved client.close
---
index.js | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/index.js b/index.js
index 3bfac54..1a976a7 100644
--- a/index.js
+++ b/index.js
@@ -160,6 +160,7 @@ SysLogger.prototype._send = function(message, severity) {
function(err) {
if (err) console.error('Can\'t connect to localhost:514');
});
+ client.close();
break;
case "unix_dgram":
var message = new Buffer('<' + (this.facility * 8 + severity) + '>' +
@@ -170,9 +171,9 @@ SysLogger.prototype._send = function(message, severity) {
function(err) {
if (err) console.error('Can\'t connect to /dev/log');
});
+ client.close();
break;
}
- client.close();
};
/**
--
1.7.2.3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment