2 var levels = require('./levels')
3 , util = require('util')
4 , events = require('events')
5 , DEFAULT_CATEGORY = '[default]';
7 var logWritesEnabled = true;
10 * Models a logging event.
12 * @param {String} categoryName name of category
13 * @param {Log4js.Level} level level of message
14 * @param {Array} data objects to log
15 * @param {Log4js.Logger} logger the associated logger
16 * @author Seth Chisamore
18 function LoggingEvent (categoryName, level, data, logger) {
19 this.startTime = new Date();
20 this.categoryName = categoryName;
27 * Logger to log messages.
28 * use {@see Log4js#getLogger(String)} to get an instance.
30 * @param name name of category to log to
31 * @author Stephan Strittmatter
33 function Logger (name, level) {
34 this.category = name || DEFAULT_CATEGORY;
40 util.inherits(Logger, events.EventEmitter);
41 Logger.DEFAULT_CATEGORY = DEFAULT_CATEGORY;
42 Logger.prototype.level = levels.TRACE;
44 Logger.prototype.setLevel = function(level) {
45 this.level = levels.toLevel(level, this.level || levels.TRACE);
48 Logger.prototype.removeLevel = function() {
52 Logger.prototype.log = function() {
53 var logLevel = levels.toLevel(arguments[0], levels.INFO);
54 if (!this.isLevelEnabled(logLevel)) {
57 var numArgs = arguments.length - 1;
58 var args = new Array(numArgs);
59 for (var i = 0; i < numArgs; i++) {
60 args[i] = arguments[i + 1];
62 this._log(logLevel, args);
65 Logger.prototype.isLevelEnabled = function(otherLevel) {
66 return this.level.isLessThanOrEqualTo(otherLevel);
69 ['Trace','Debug','Info','Warn','Error','Fatal', 'Mark'].forEach(
70 function(levelString) {
71 addLevelMethods(levelString);
75 function addLevelMethods(level) {
76 level = levels.toLevel(level);
78 var levelStrLower = level.toString().toLowerCase();
79 var levelMethod = levelStrLower.replace(/_([a-z])/g, function(g) { return g[1].toUpperCase(); } );
80 var isLevelMethod = levelMethod[0].toUpperCase() + levelMethod.slice(1);
82 Logger.prototype['is'+isLevelMethod+'Enabled'] = function() {
83 return this.isLevelEnabled(level.toString());
86 Logger.prototype[levelMethod] = function () {
87 if (logWritesEnabled && this.isLevelEnabled(level)) {
88 var numArgs = arguments.length;
89 var args = new Array(numArgs);
90 for (var i = 0; i < numArgs; i++) {
91 args[i] = arguments[i];
93 this._log(level, args);
98 Logger.prototype._log = function(level, data) {
99 var loggingEvent = new LoggingEvent(this.category, level, data, this);
100 this.emit('log', loggingEvent);
104 * Disable all log writes.
107 function disableAllLogWrites() {
108 logWritesEnabled = false;
115 function enableAllLogWrites() {
116 logWritesEnabled = true;
119 exports.LoggingEvent = LoggingEvent;
120 exports.Logger = Logger;
121 exports.disableAllLogWrites = disableAllLogWrites;
122 exports.enableAllLogWrites = enableAllLogWrites;
123 exports.addLevelMethods = addLevelMethods;