8000 Adds subcategories to the appenders and loggers. Adds property "level… · yanxi123-com/log4js-node@6fa9984 · GitHub
[go: up one dir, main page]

Skip to content

Commit 6fa9984

Browse files
author
Luis Malheiro
committed
Adds subcategories to the appenders and loggers. Adds property "level" at the file appender to limit the levels that a file appender accepts.
Creates a MARK category that always write to the log. That's useful to write things like '---- STARTED ----'.
1 parent fb072dd commit 6fa9984

File tree

4 files changed

+94
-33
lines changed

4 files changed

+94
-33
lines changed

lib/appenders/file.js

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ var layouts = require('../layouts')
66
, streams = require('../streams')
77
, os = require('os')
88
, eol = os.EOL || '\n'
9-
, openFiles = [];
9+
, openFiles = []
10+
, levels = require('../levels');
1011

1112
//close open files on process exit.
1213
process.on('exit', function() {
@@ -26,7 +27,7 @@ process.on('exit', function() {
2627
* @param numBackups - the number of log files to keep after logSize
2728
* has been reached (default 5)
2829
*/
29-
function fileAppender (file, layout, logSize, numBackups) {
30+
function fileAppender (file, layout, logSize, numBackups, level) {
3031
var bytesWritten = 0;
3132
file = path.normalize(file);
3233
layout = layout || layouts.basicLayout;
@@ -60,10 +61,23 @@ function fileAppender (file, layout, logSize, numBackups) {
6061

6162
// push file to the stack of open handlers
6263
openFiles.push(logFile);
63-
64-
return function(loggingEvent) {
65-
logFile.write(layout(loggingEvent) + eol, "utf8");
66-
};
64+
65+
if (level) {
66+
67+
var obj = levels.toLevel(level, levels.TRACE);
68+
return function(loggingEvent) {
69+
if (obj.isLessThanOrEqualTo(loggingEvent.level))
70+
logFile.write(layout(loggingEvent) + eol, "utf8");
71+
};
72+
73+
} else {
74+
75+
return function(loggingEvent) {
76+
logFile.write(layout(loggingEvent) + eol, "utf8");
77+
};
78+
79+
}
80+
6781
}
6882

6983
function configure(config, options) {
@@ -76,7 +90,7 @@ function configure(config, options) {
7690
config.filename = path.join(options.cwd, config.filename);
7791
}
7892

79-
return fileAppender(config.filename, layout, config.maxLogSize, config.backups);
93+
return fileAppender(config.filename, layout, config.maxLogSize, config.backups, config.level);
8094
}
8195

8296
function shutdown(cb) {

lib/levels.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ module.exports = {
6363
WARN: new Level(30000, "WARN"),
6464
ERROR: new Level(40000, "ERROR"),
6565
FATAL: new Level(50000, "FATAL"),
66+
MARK: new Level(Number.MAX_VALUE-1, "MARK"),
6667
OFF: new Level(Number.MAX_VALUE, "OFF"),
6768
toLevel: toLevel
6869
};

lib/log4js.js

Lines changed: 71 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -92,39 +92,74 @@ function getBufferedLogger(categoryName) {
9292
return logger;
9393
}
9494

95+
function normalizeCategory (category) {
96+
return category + '.';
97+
}
98+
99+
function doesLevelEntryContainsLogger (levelCategory, loggerCategory) {
100+
var normalizedLevelCategory = normalizeCategory(levelCategory);
101+
var normalizedLoggerCategory = normalizeCategory(loggerCategory);
102+
< 6DB6 span class=pl-k>return normalizedLoggerCategory.substring(0, normalizedLevelCategory.length) == normalizedLevelCategory;
103+
}
104+
105+
function doesAppenderContainsLogger (appenderCategory, loggerCategory) {
106+
var normalizedAppenderCategory = normalizeCategory(appenderCategory);
107+
var normalizedLoggerCategory = normalizeCategory(loggerCategory);
108+
return normalizedLoggerCategory.substring(0, normalizedAppenderCategory.length) == normalizedAppenderCategory;
109+
}
110+
95111

96112
/**
97113
* Get a logger instance. Instance is cached on categoryName level.
98114
* @param {String} categoryName name of category to log to.
99115
* @return {Logger} instance of logger for the category
100116
* @static
101117
*/
102-
function getLogger (categoryName) {
118+
function getLogger (loggerCategoryName) {
103119

104120
// Use default logger if categoryName is not specified or invalid
105-
if (typeof categoryName !== "string") {
106-
categoryName = Logger.DEFAULT_CATEGORY;
121+
if (typeof loggerCategoryName !== "string") {
122+
loggerCategoryName = Logger.DEFAULT_CATEGORY;
107123
}
108124

109-
var appenderList;
110-
if (!hasLogger(categoryName)) {
125+
if (!hasLogger(loggerCategoryName)) {
126+
127+
var level = undefined;
128+
129+
// If there's a "levels" entry in the configuration
130+
if (levels.config) {
131+
// Goes through the categories in the levels configuration entry, starting by the "higher" ones.
132+
var keys = Object.keys(levels.config).sort();
133+
for (var idx = 0; idx < keys.length; idx++) {
134+
var levelCategory = keys[idx];
135+
if (doesLevelEntryContainsLogger(levelCategory, loggerCategoryName)) {
136+
// level for the logger
137+
level = levels.config[levelCategory];
138+
}
139+
}
140+
}
141+
111142
// Create the logger for this name if it doesn't already exist
112-
loggers[categoryName] = new Logger(categoryName);
113-
if (appenders[categoryName]) {
114-
appenderList = appenders[categoryName];
115-
appenderList.forEach(function(appender) {
116-
loggers[categoryName].addListener("log", appender);
117-
});
143+
loggers[loggerCategoryName] = new Logger(loggerCategoryName, level);
144+
145+
var appenderList;
146+
for(var appenderCategory in appenders) {
147+
if (doesAppenderContainsLogger(appenderCategory, loggerCategoryName)) {
148+
appenderList = appenders[appenderCategory];
149+
appenderList.forEach(function(appender) {
150+
loggers[loggerCategoryName].addListener("log", appender);
151+
});
152+
}
118153
}
119154
if (appenders[ALL_CATEGORIES]) {
120155
appenderList = appenders[ALL_CATEGORIES];
121156
appenderList.forEach(function(appender) {
122-
loggers[categoryName].addListener("log", appender);
157+
loggers[loggerCategoryName].addListener("log", appender);
123158
});
124159
}
125160
}
126161

127-
return loggers[categoryName];
162+
return loggers[loggerCategoryName];
128163
}
129164

130165
/**
@@ -141,13 +176,19 @@ function addAppender () {
141176
args = args[0];
142177
}
143178

144-
args.forEach(function(category) {
145-
addAppenderToCategory(appender, category);
179+
args.forEach(function(appenderCategory) {
180+
addAppenderToCategory(appender, appenderCategory);
146181

147-
if (category === ALL_CATEGORIES) {
1 10000 82+
if (appenderCategory === ALL_CATEGORIES) {
148183
addAppenderToAllLoggers(appender);
149-
} else if (hasLogger(category)) {
150-
loggers[category].addListener("log", appender);
184+
} else {
185+
186+
for(var loggerCategory in loggers) {
187+
if (doesAppenderContainsLogger(appenderCategory,loggerCategory)) {
188+
loggers[loggerCategory].addListener("log", appender);
189+
}
190+
}
191+
151192
}
152193
});
153194
}
@@ -193,14 +234,19 @@ function configureAppenders(appenderList, options) {
193234
}
194235
}
195236

196-
function configureLevels(levels) {
197-
if (levels) {
198-
for (var category in levels) {
199-
if (levels.hasOwnProperty(category)) {
237+
function configureLevels(_levels) {
238+
levels.config = _levels; // Keep it so we can create loggers later using this cfg
239+
if (_levels) {
240+
var keys = Object.keys(levels.config).sort();
241+
for (var idx in keys) {
242+
var category = keys[idx];
243+
for(var loggerCategory in loggers) {
244+
if (doesLevelEntryContainsLogger(category, loggerCategory)) {
245+
loggers[loggerCategory].setLevel(_levels[category]);
246+
}
200247
if(category === ALL_CATEGORIES) {
201248
setGlobalLogLevel(levels[category]);
202-
}
203-
getLogger(category).setLevel(levels[category]);
249+
}
204250
}
205251
}
206252
}
@@ -231,8 +277,8 @@ function loadConfigurationFile(filename) {
231277
function configureOnceOff(config, options) {
232278
if (config) {
233279
try {
234-
configureAppenders(config.appenders, options);
235280
configureLevels(config.levels);
281+
configureAppenders(config.appenders, options);
236282

237283
if (config.replaceConsole) {
238284
replaceConsole();

lib/logger.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ Logger.prototype.isLevelEnabled = function(otherLevel) {
6363
return this.level.isLessThanOrEqualTo(otherLevel);
6464
};
6565

66-
['Trace','Debug','Info','Warn','Error','Fatal'].forEach(
66+
['Trace','Debug','Info','Warn','Error','Fatal', 'Mark'].forEach(
6767
function(levelString) {
6868
var level = levels.toLevel(levelString);
6969
Logger.prototype['is'+levelString+'Enabled'] = function() {

0 commit comments

Comments
 (0)
0