Moved Logger into separate file, added support for loading appenders outside log4js, removed 'name' from appender requirements
This commit is contained in:
@@ -16,6 +16,5 @@ function configure(config) {
|
||||
return consoleAppender(layout);
|
||||
}
|
||||
|
||||
exports.name = "console";
|
||||
exports.appender = consoleAppender;
|
||||
exports.configure = configure;
|
||||
|
||||
@@ -63,6 +63,5 @@ function configure(config, options) {
|
||||
return fileAppender(config.filename, layout, config.maxLogSize, config.backups);
|
||||
}
|
||||
|
||||
exports.name = "file";
|
||||
exports.appender = fileAppender;
|
||||
exports.configure = configure;
|
||||
|
||||
@@ -89,6 +89,5 @@ function configure(config) {
|
||||
return gelfAppender(layout, config.host, config.port, config.hostname, config.facility);
|
||||
}
|
||||
|
||||
exports.name = "gelf";
|
||||
exports.appender = gelfAppender;
|
||||
exports.configure = configure;
|
||||
|
||||
@@ -71,6 +71,5 @@ function configure(config) {
|
||||
return createAppender(config);
|
||||
}
|
||||
|
||||
exports.name = 'hookio';
|
||||
exports.appender = createAppender;
|
||||
exports.configure = configure;
|
||||
|
||||
@@ -16,6 +16,5 @@ function configure(config) {
|
||||
return logLevelFilter(config.level, appender);
|
||||
}
|
||||
|
||||
exports.name = "logLevelFilter";
|
||||
exports.appender = logLevelFilter;
|
||||
exports.configure = configure;
|
||||
|
||||
@@ -72,6 +72,5 @@ function configure(config) {
|
||||
return createAppender(config);
|
||||
}
|
||||
|
||||
exports.name = 'multiprocess';
|
||||
exports.appender = createAppender;
|
||||
exports.configure = configure;
|
||||
|
||||
@@ -2,15 +2,15 @@ var layouts = require("../layouts"),
|
||||
mailer = require("nodemailer");
|
||||
|
||||
/**
|
||||
* SMTP Appender. Sends logging events using SMTP protocol.
|
||||
* SMTP Appender. Sends logging events using SMTP protocol.
|
||||
* It can either send an email on each event or group several logging events gathered during specified interval.
|
||||
*
|
||||
* @param recipients comma separated list of email recipients
|
||||
* @param sender sender of all emails (defaults to SMTP user)
|
||||
* @param subject subject of all email messages (defaults to first event's message)
|
||||
* @param subject subject of all email messages (defaults to first event's message)
|
||||
* @param layout a function that takes a logevent and returns a string (defaults to basicLayout).
|
||||
* @param smtpConfig SMTP configuration for 'nodemailer'
|
||||
* @param sendInterval the time in seconds between sending attempts (defaults to 0);
|
||||
* @param sendInterval the time in seconds between sending attempts (defaults to 0);
|
||||
* all events are buffered and sent in one email during this time; if 0 than every event sends an email
|
||||
*/
|
||||
function smtpAppender(recipients, sender, subject, layout, smtpConfig, sendInterval) {
|
||||
@@ -19,20 +19,20 @@ function smtpAppender(recipients, sender, subject, layout, smtpConfig, sendInter
|
||||
subjectLayout = layouts.messagePassThroughLayout;
|
||||
mailer.SMTP = smtpConfig;
|
||||
sendInterval = sendInterval*1000 || 0;
|
||||
|
||||
|
||||
var logEventBuffer = [];
|
||||
var sendTimer;
|
||||
|
||||
|
||||
function sendBuffer() {
|
||||
if (logEventBuffer.length == 0)
|
||||
return;
|
||||
|
||||
|
||||
var firstEvent = logEventBuffer[0];
|
||||
var body = "";
|
||||
while (logEventBuffer.length > 0) {
|
||||
body += layout(logEventBuffer.shift()) + "\n";
|
||||
}
|
||||
|
||||
|
||||
var msg = {
|
||||
sender: sender,
|
||||
to: recipients,
|
||||
@@ -45,15 +45,15 @@ function smtpAppender(recipients, sender, subject, layout, smtpConfig, sendInter
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function scheduleSend() {
|
||||
if (!sendTimer)
|
||||
sendTimer = setTimeout(function() {
|
||||
sendTimer = null;
|
||||
sendTimer = null;
|
||||
sendBuffer();
|
||||
}, sendInterval);
|
||||
}
|
||||
|
||||
|
||||
return function(loggingEvent) {
|
||||
logEventBuffer.push(loggingEvent);
|
||||
if (sendInterval > 0)
|
||||
@@ -71,6 +71,5 @@ function configure(config) {
|
||||
return smtpAppender(config.recipients, config.sender, config.subject, layout, config.smtp, config.sendInterval);
|
||||
}
|
||||
|
||||
exports.name = "smtp";
|
||||
exports.appender = smtpAppender;
|
||||
exports.configure = configure;
|
||||
|
||||
@@ -47,6 +47,13 @@ Level.prototype.isGreaterThanOrEqualTo = function(otherLevel) {
|
||||
return this.level >= otherLevel.level;
|
||||
};
|
||||
|
||||
Level.prototype.isEqualTo = function(otherLevel) {
|
||||
if (typeof otherLevel == "string") {
|
||||
otherLevel = toLevel(otherLevel);
|
||||
}
|
||||
return this.level === otherLevel.level;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
ALL: new Level(Number.MIN_VALUE, "ALL")
|
||||
, TRACE: new Level(5000, "TRACE")
|
||||
|
||||
@@ -282,9 +282,14 @@ function restoreConsole() {
|
||||
}
|
||||
|
||||
function loadAppender(appender) {
|
||||
var appenderModule = require('./appenders/' + appender);
|
||||
module.exports.appenders[appenderModule.name] = appenderModule.appender;
|
||||
appenderMakers[appenderModule.name] = appenderModule.configure;
|
||||
var appenderModule;
|
||||
try {
|
||||
appenderModule = require('./appenders/' + appender);
|
||||
} catch (e) {
|
||||
appenderModule = require(appender);
|
||||
}
|
||||
module.exports.appenders[appender] = appenderModule.appender.bind(appenderModule);
|
||||
appenderMakers[appender] = appenderModule.configure.bind(appenderModule);
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
||||
78
lib/logger.js
Normal file
78
lib/logger.js
Normal file
@@ -0,0 +1,78 @@
|
||||
var levels = require('./levels'),
|
||||
util = require('util'),
|
||||
events = require('events'),
|
||||
DEFAULT_CATEGORY = '[default]';
|
||||
|
||||
/**
|
||||
* Models a logging event.
|
||||
* @constructor
|
||||
* @param {String} categoryName name of category
|
||||
* @param {Log4js.Level} level level of message
|
||||
* @param {Array} data objects to log
|
||||
* @param {Log4js.Logger} logger the associated logger
|
||||
* @author Seth Chisamore
|
||||
*/
|
||||
function LoggingEvent (categoryName, level, data, logger) {
|
||||
this.startTime = new Date();
|
||||
this.categoryName = categoryName;
|
||||
this.data = data;
|
||||
this.level = level;
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
/**
|
||||
* Logger to log messages.
|
||||
* use {@see Log4js#getLogger(String)} to get an instance.
|
||||
* @constructor
|
||||
* @param name name of category to log to
|
||||
* @author Stephan Strittmatter
|
||||
*/
|
||||
function Logger (name, level) {
|
||||
this.category = name || DEFAULT_CATEGORY;
|
||||
|
||||
if (! this.level) {
|
||||
this.__proto__.level = levels.TRACE;
|
||||
}
|
||||
}
|
||||
util.inherits(Logger, events.EventEmitter);
|
||||
Logger.DEFAULT_CATEGORY = DEFAULT_CATEGORY;
|
||||
|
||||
Logger.prototype.setLevel = function(level) {
|
||||
this.level = levels.toLevel(level, this.level || levels.TRACE);
|
||||
};
|
||||
|
||||
Logger.prototype.removeLevel = function() {
|
||||
delete this.level;
|
||||
};
|
||||
|
||||
Logger.prototype.log = function() {
|
||||
var args = Array.prototype.slice.call(arguments)
|
||||
, logLevel = args.shift()
|
||||
, loggingEvent = new LoggingEvent(this.category, logLevel, args, this);
|
||||
this.emit("log", loggingEvent);
|
||||
};
|
||||
|
||||
Logger.prototype.isLevelEnabled = function(otherLevel) {
|
||||
return this.level.isLessThanOrEqualTo(otherLevel);
|
||||
};
|
||||
|
||||
['Trace','Debug','Info','Warn','Error','Fatal'].forEach(
|
||||
function(levelString) {
|
||||
var level = levels.toLevel(levelString);
|
||||
Logger.prototype['is'+levelString+'Enabled'] = function() {
|
||||
return this.isLevelEnabled(level);
|
||||
};
|
||||
|
||||
Logger.prototype[levelString.toLowerCase()] = function () {
|
||||
if (this.isLevelEnabled(level)) {
|
||||
var args = Array.prototype.slice.call(arguments);
|
||||
args.unshift(level);
|
||||
Logger.prototype.log.apply(this, args);
|
||||
}
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
exports.LoggingEvent = LoggingEvent;
|
||||
exports.Logger = Logger;
|
||||
Reference in New Issue
Block a user