Merge pull request #101 from Dignifiedquire/feature-color-pattern

[feature] Add patternColoured Layout.
This commit is contained in:
Gareth Jones 2012-12-02 14:51:27 -08:00
commit 8b42e46071
2 changed files with 37 additions and 26 deletions

View File

@ -24,7 +24,6 @@ var dateFormat = require('./date_format')
, OFF: "grey" , OFF: "grey"
}; };
function formatLogData(logData) { function formatLogData(logData) {
var output = "" var output = ""
, data = Array.isArray(logData) ? logData.slice() : Array.prototype.slice.call(arguments) , data = Array.isArray(logData) ? logData.slice() : Array.prototype.slice.call(arguments)
@ -58,10 +57,6 @@ function formatLogData(logData) {
return output; return output;
} }
/**
* Taken from masylum's fork (https://github.com/masylum/log4js-node)
*/
function colorize (str, style) {
var styles = { var styles = {
//styles //styles
'bold' : [1, 22], 'bold' : [1, 22],
@ -80,8 +75,18 @@ function colorize (str, style) {
'red' : [31, 39], 'red' : [31, 39],
'yellow' : [33, 39] 'yellow' : [33, 39]
}; };
return style ? '\033[' + styles[style][0] + 'm' + str +
'\033[' + styles[style][1] + 'm' : str; function colorizeStart(style) {
return style ? '\033[' + styles[style][0] + 'm' : '';
}
function colorizeEnd(style) {
return style ? '\033[' + styles[style][1] + 'm' : '';
}
/**
* Taken from masylum's fork (https://github.com/masylum/log4js-node)
*/
function colorize (str, style) {
return colorizeStart(style) + str + colorizeEnd(style);
} }
function timestampLevelAndCategory(loggingEvent, colour) { function timestampLevelAndCategory(loggingEvent, colour) {
@ -134,12 +139,13 @@ function messagePassThroughLayout (loggingEvent) {
* - %d date in various formats * - %d date in various formats
* - %% % * - %% %
* - %n newline * - %n newline
* You can use %[ and %] to define a colored block.
* Takes a pattern string and returns a layout function. * Takes a pattern string and returns a layout function.
* @author Stephan Strittmatter * @author Stephan Strittmatter
*/ */
function patternLayout (pattern) { function patternLayout (pattern) {
var TTCC_CONVERSION_PATTERN = "%r %p %c - %m%n"; var TTCC_CONVERSION_PATTERN = "%r %p %c - %m%n";
var regex = /%(-?[0-9]+)?(\.?[0-9]+)?([cdmnpr%])(\{([^\}]+)\})?|([^%]+)/; var regex = /%(-?[0-9]+)?(\.?[0-9]+)?([\[\]cdmnpr%])(\{([^\}]+)\})?|([^%]+)/;
pattern = pattern || TTCC_CONVERSION_PATTERN; pattern = pattern || TTCC_CONVERSION_PATTERN;
@ -206,6 +212,12 @@ function patternLayout (pattern) {
case "r": case "r":
replacement = "" + loggingEvent.startTime.toLocaleTimeString(); replacement = "" + loggingEvent.startTime.toLocaleTimeString();
break; break;
case "[":
replacement = colorizeStart(colours[loggingEvent.level.toString()]);
break;
case "]":
replacement = colorizeEnd(colours[loggingEvent.level.toString()]);
break;
case "%": case "%":
replacement = "%"; replacement = "%";
break; break;
@ -248,7 +260,6 @@ function patternLayout (pattern) {
}; };
module.exports = { module.exports = {
basicLayout: basicLayout basicLayout: basicLayout
, messagePassThroughLayout: messagePassThroughLayout , messagePassThroughLayout: messagePassThroughLayout

View File

@ -243,9 +243,9 @@ vows.describe('log4js layouts').addBatch({
test(args, '%-6p', 'DEBUG '); test(args, '%-6p', 'DEBUG ');
test(args, '%-8p', 'DEBUG '); test(args, '%-8p', 'DEBUG ');
test(args, '%-10p', 'DEBUG '); test(args, '%-10p', 'DEBUG ');
},
'%[%r%] should output colored time': function(args) {
test(args, '%[%r%]', '\033[36m14:18:30\033[39m');
} }
} }
}).export(module); }).export(module);