Created
March 21, 2011 21:54
-
-
Save billywhizz/880300 to your computer and use it in GitHub Desktop.
add unix-dgram option to ain
This file contains hidden or 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
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 |
This file contains hidden or 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
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 |
This file contains hidden or 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
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 |
This file contains hidden or 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
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