Added node-modules

This commit is contained in:
Dobie Wollert
2014-09-14 07:04:16 -04:00
parent 663941bf57
commit 6a92348cf5
4870 changed files with 670395 additions and 0 deletions

4
node_modules/log4node/.npmignore generated vendored Normal file
View File

@ -0,0 +1,4 @@
node_modules
npm-debug.log
test/test.log*
test/process.pid

6
node_modules/log4node/CHANGELOG generated vendored Normal file
View File

@ -0,0 +1,6 @@
CHANGELOG
0.1.2
* feature : getter on log level, thx to @dax
* feature : specify prefix as function, thx to @dax

132
node_modules/log4node/Readme.markdown generated vendored Normal file
View File

@ -0,0 +1,132 @@
# Overview
This module is designed to be used with Node Cluster in production:
* one log file for all workers
* compatible with logrotate: an USR2 signal reopen the log file
This module is compatible with node 0.8.x. For the node 0.6.x, please use version 0.0.1 of this module.
This module is inspired from [this module](https://github.com/visionmedia/log.js).
# How to use it
## Installation
npm install log4node
## Usage
Default logger:
```js
var log = require('log4node');
log.error("this is a log");
```
Will output to console.
Note: you can reconfigure default logger by calling
log.reconfigure({level: 'info', file: 'toto.log'});
Will now write into `toto.log`
Your custom logger:
```js
var log4node = require('log4node');
log = new log4node.Log4Node({level: 'warning', file: 'test.log'});
log.error("this is a log");
log.debug("this is a debug log");
```
Note : you can use the syntax accepted by [`utils.format`](http://nodejs.org/api/util.html#util_util_format_format).
## Log level
Log level can be adjusted for each logger:
log.setLogLevel('info');
Log level for default logger is 'info'.
Available log levels are:
* emergency
* alert
* critical
* error
* warning
* notice
* info
* debug
## Prefix
Prefix of log lines can be changed:
```js
log.setPrefix("%d - %p ");
```
You can use following field in prefix:
* `%d`: current date
* `%p`: current process id
* `%l`: log level
Default prefix is: `[%d] %l `
## Cluster mode
Workers processes will send logs to the cluster master for writing to file.
Setup is fully transparent for developper.
A full example can be found [here](https://github.com/bpaquet/log4node/blob/master/test/cluster/test1.js).
## Reopen log file
Just send USR2 signal to node process, or, in cluster mode, to master node process:
kill -USR2 pid
Example of logrotate file:
/var/log/node.log {
rotate 5
weekly
postrotate
kill -USR2 `cat process.pid`
endscript
}
## Create a specialized logger
This feature is provided to specialize a logger for a sub-component.
You can create a new logger with its own level and prefix for a sub-component.
The logs will be send to the same files with a prefix.
```js
log = new log4node.Log4Node('warning', 'test.log');
sublogger1 = log.clone({prefix:'SUBMODULE - ', level:'error');
```
or with the default logger
```js
sublogger1 = log4node.clone(prefix:'SUBMODULE - ', level:'error');
```
# License
Copyright 2012 Bertrand Paquet
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

175
node_modules/log4node/lib/log4node.js generated vendored Normal file
View File

@ -0,0 +1,175 @@
// Copyright 2012 Bertrand Paquet
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
var fs = require('fs'),
util = require('util'),
cluster = require('cluster'),
events = require('events');
var
loggers = {},
// levels are accessible through the exports object in uppercase
// eg: exports.EMERGENCY === 0
// all levels are also available as function helpers
// eg: logger.alert('message')
levels = {
'emergency': 0,
'alert': 1,
'critical': 2,
'error': 3,
'warning': 4,
'notice': 5,
'info': 6,
'debug': 7
}
var sig_listener = new events.EventEmitter();
sig_listener.setMaxListeners(0);
process.on('SIGUSR2', function() {
sig_listener.emit('SIGUSR2');
});
cluster.on('online', function(worker) {
worker.on('message', function(msg) {
if (msg.log && msg.logger_id && loggers[msg.logger_id]) {
loggers[msg.logger_id].write(msg.log);
}
})
});
function computePrefix(prefix, level) {
if (typeof prefix === 'function') {
return prefix(level);
}
else {
return prefix
.replace(/%d/, new Date().toUTCString())
.replace(/%l/, level.toUpperCase())
.replace(/%p/, process.pid);
}
}
function Log4Node(config) {
config = config || {};
if (config.parent) {
this.parent = config.parent;
this.setLogLevel(config.level || this.parent.level);
var child_prefix = config.prefix || '';
this.prefix = function(level) {
return computePrefix(this.parent.prefix, level) + computePrefix(child_prefix, level);
}.bind(this);
this.id = this.parent.id;
}
else {
this.setLogLevel(config.level);
this.prefix = config.prefix || "[%d] %l ";
this.id = config.file || 'stdout';
loggers[this.id] = this;
if (cluster.isMaster) {
if (config.file === undefined) {
this.stream = process.stdout;
}
else {
this.file = config.file;
this.reopen();
sig_listener.on('SIGUSR2', function() {
this.reopen();
}.bind(this));
this.stream.on('error', function(err) {
console.warn('Unable to write into file : ' + this.file + ' ' + err);
}.bind(this));
}
}
}
}
Log4Node.prototype.clone = function(config) {
config = config || {};
config.parent = this;
return new Log4Node(config);
}
Log4Node.prototype.reopen = function() {
if (this.stream) {
this.stream.end();
}
this.stream = fs.createWriteStream(this.file, {flags: 'a', encoding: 'utf-8'});
}
Log4Node.prototype.setPrefix = function(prefix) {
this.prefix = prefix;
}
Log4Node.prototype.setLogLevel = function(level) {
if (typeof level === 'string') level = levels[level];
this.level = level === undefined ? levels.info : level;
}
Log4Node.prototype.getLogLevel = function(level) {
return this.level;
}
Log4Node.prototype.write = function(msg) {
if (this.parent) {
this.parent.write(msg);
}
else {
this.stream.write(msg + '\n');
}
}
Log4Node.prototype.log = function(level, args) {
if (levels[level] <= this.level) {
var i = 1;
var msg = computePrefix(this.prefix, level);
msg += util.format.apply(this, args);
if (cluster.isMaster) {
this.write(msg);
}
else {
// do no try to send a message to master if disconnected
// because in this case node will emit an error event
if (process.connected) {
process.send({log: msg, logger_id: this.id});
}
}
}
}
// exports
exports.Log4Node = Log4Node;
Object.keys(levels).forEach(function(level) {
// Log4Node.INFO|DEBUG..
exports[level.toUpperCase()] = levels[level];
// Log4Node.prototype.info|debug..
Log4Node.prototype[level] = function() {
this.log(level, arguments);
}
});
// set easy defaultLogger
// allows require('Log4Node').info('')|debug('')..
var defaultLogger = new Log4Node();
Object.keys(Log4Node.prototype).forEach(function(method) {
exports[method] = function() {
return defaultLogger[method].apply(defaultLogger, arguments);
}
});
exports.reconfigure = function(config) {
return defaultLogger = new Log4Node(config);
}

13
node_modules/log4node/license.txt generated vendored Normal file
View File

@ -0,0 +1,13 @@
Copyright 2012 Bertrand Paquet
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

45
node_modules/log4node/package.json generated vendored Normal file
View File

@ -0,0 +1,45 @@
{
"name": "log4node",
"description": "Logger for node cluster, compatible with logrotate",
"version": "0.1.2",
"author": {
"name": "Bertrand Paquet",
"email": "bertrand.paquet@gmail.com"
},
"keywords": [
"log",
"logger",
"cluster",
"logrotate"
],
"main": "./lib/log4node.js",
"homepage": "https://github.com/bpaquet/log4node",
"repository": {
"type": "git",
"url": "git://github.com/bpaquet/log4node.git"
},
"licenses": [
{
"type": "Apache2",
"url": "http://www.apache.org/licenses/LICENSE-2.0"
}
],
"devDependencies": {
"vows": "0.6.x",
"whereis": "0.0.2"
},
"scripts": {
"test": "./test-runner.sh"
},
"engines": {
"node": ">= 0.6.0"
},
"readme": "# Overview\n\nThis module is designed to be used with Node Cluster in production:\n* one log file for all workers\n* compatible with logrotate: an USR2 signal reopen the log file\n\nThis module is compatible with node 0.8.x. For the node 0.6.x, please use version 0.0.1 of this module.\n\nThis module is inspired from [this module](https://github.com/visionmedia/log.js).\n\n# How to use it\n\n## Installation\n\n npm install log4node\n\n## Usage\n\nDefault logger:\n```js\nvar log = require('log4node');\n\nlog.error(\"this is a log\");\n```\nWill output to console.\n\nNote: you can reconfigure default logger by calling\n\n log.reconfigure({level: 'info', file: 'toto.log'});\n\nWill now write into `toto.log`\n\nYour custom logger:\n```js\nvar log4node = require('log4node');\n log = new log4node.Log4Node({level: 'warning', file: 'test.log'});\n\nlog.error(\"this is a log\");\nlog.debug(\"this is a debug log\");\n```\n\nNote : you can use the syntax accepted by [`utils.format`](http://nodejs.org/api/util.html#util_util_format_format).\n\n## Log level\n\nLog level can be adjusted for each logger:\n\n log.setLogLevel('info');\n\nLog level for default logger is 'info'.\n\nAvailable log levels are:\n\n* emergency\n* alert\n* critical\n* error\n* warning\n* notice\n* info\n* debug\n\n## Prefix\n\nPrefix of log lines can be changed:\n\n```js\nlog.setPrefix(\"%d - %p \");\n```\n\nYou can use following field in prefix:\n* `%d`: current date\n* `%p`: current process id\n* `%l`: log level\n\nDefault prefix is: `[%d] %l `\n\n## Cluster mode\n\nWorkers processes will send logs to the cluster master for writing to file.\n\nSetup is fully transparent for developper.\n\nA full example can be found [here](https://github.com/bpaquet/log4node/blob/master/test/cluster/test1.js).\n\n## Reopen log file\n\nJust send USR2 signal to node process, or, in cluster mode, to master node process:\n\n kill -USR2 pid\n\nExample of logrotate file:\n\n /var/log/node.log {\n rotate 5\n weekly\n postrotate\n kill -USR2 `cat process.pid`\n endscript\n }\n\n## Create a specialized logger\nThis feature is provided to specialize a logger for a sub-component.\nYou can create a new logger with its own level and prefix for a sub-component.\nThe logs will be send to the same files with a prefix.\n\n```js\nlog = new log4node.Log4Node('warning', 'test.log');\nsublogger1 = log.clone({prefix:'SUBMODULE - ', level:'error');\n```\n\nor with the default logger\n\n```js\nsublogger1 = log4node.clone(prefix:'SUBMODULE - ', level:'error');\n```\n\n# License\n\nCopyright 2012 Bertrand Paquet\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n",
"readmeFilename": "Readme.markdown",
"_id": "log4node@0.1.2",
"dist": {
"shasum": "5648004b539af4738cd96c868eaa1f127d874819"
},
"_from": "log4node@",
"_resolved": "https://registry.npmjs.org/log4node/-/log4node-0.1.2.tgz"
}

15
node_modules/log4node/test-runner.sh generated vendored Executable file
View File

@ -0,0 +1,15 @@
#!/bin/bash
set -e
cd test
if [ "$TEST" = "" ]; then
TEST=`ls test*.js`
fi
for test in $TEST; do
echo "Launching test : $test"
NODE_PATH=../lib vows $test --spec
echo ""
done

View File

@ -0,0 +1,4 @@
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Hello, I'm a worker

View File

@ -0,0 +1,16 @@
var cluster = require('cluster'),
log4node = require('log4node');
if (cluster.isMaster) {
for (var i = 0; i < 4; i++) {
cluster.fork();
}
var log = new log4node.Log4Node({level: 'warning', file: 'test.log'});
} else {
var log = new log4node.Log4Node({level: 'warning', file: 'test.log'});
log.setPrefix("%l %p : ");
log.error("Hello, I'm a worker");
setTimeout(function() {
process.exit();
}, 100);
}

View File

@ -0,0 +1,7 @@
"test.log" {
rotate 5
weekly
postrotate
kill -USR2 `cat process.pid`
endscript
}

5
node_modules/log4node/test/cluster-logrotate/output1 generated vendored Normal file
View File

@ -0,0 +1,5 @@
ERROR \d+ : Master started
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Hello, I'm a worker

4
node_modules/log4node/test/cluster-logrotate/output2 generated vendored Normal file
View File

@ -0,0 +1,4 @@
ERROR \d+ : Worker \d+ died
ERROR \d+ : Worker \d+ died
ERROR \d+ : Worker \d+ died
ERROR \d+ : Worker \d+ died

22
node_modules/log4node/test/cluster-logrotate/test1.js generated vendored Normal file
View File

@ -0,0 +1,22 @@
var cluster = require('cluster'),
log4node = require('log4node'),
log = new log4node.Log4Node({level: 'warning', file: 'test.log'});
log.setPrefix("%l %p : ");
if (cluster.isMaster) {
for (var i = 0; i < 4; i++) {
cluster.fork();
}
log.error("Master started");
cluster.on('exit', function(worker) {
log.error('Worker ' + worker.process.pid + ' died');
});
} else {
log.error("Hello, I'm a worker");
setTimeout(function() {
process.exit();
}, 2000);
}

View File

@ -0,0 +1,9 @@
ERROR \d+ : Master started
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Worker \d+ died
ERROR \d+ : Worker \d+ died
ERROR \d+ : Worker \d+ died
ERROR \d+ : Worker \d+ died

22
node_modules/log4node/test/cluster-stdout-sig/test1.js generated vendored Normal file
View File

@ -0,0 +1,22 @@
var cluster = require('cluster'),
log = require('log4node');
log.setPrefix("%l %p : ");
if (cluster.isMaster) {
for (var i = 0; i < 4; i++) {
cluster.fork();
}
log.error("Master started");
cluster.on('exit', function(worker) {
log.error('Worker ' + worker.process.pid + ' died');
});
} else {
log.error("Hello, I'm a worker");
setTimeout(function() {
process.exit();
}, 100);
}

View File

@ -0,0 +1,7 @@
"test.log" {
rotate 5
weekly
postrotate
kill -USR2 `cat process.pid`
endscript
}

View File

@ -0,0 +1,5 @@
ERROR \d+ : Master started
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Hello, I'm a worker

View File

@ -0,0 +1,4 @@
ERROR \d+ : Worker \d+ died
ERROR \d+ : Worker \d+ died
ERROR \d+ : Worker \d+ died
ERROR \d+ : Worker \d+ died

View File

@ -0,0 +1,24 @@
var cluster = require('cluster'),
log4node = require('log4node'),
log = new log4node.Log4Node({level: 'warning', file: 'test.log'});
log.setPrefix("%l %p : ");
var sublog = log.clone();
if (cluster.isMaster) {
for (var i = 0; i < 4; i++) {
cluster.fork();
}
sublog.error("Master started");
cluster.on('exit', function(worker) {
sublog.error('Worker ' + worker.process.pid + ' died');
});
} else {
sublog.error("Hello, I'm a worker");
setTimeout(function() {
process.exit();
}, 2000);
}

View File

@ -0,0 +1,9 @@
ERROR \d+ : Master started
ERROR \d+ : WORKER - Hello, I'm a worker
ERROR \d+ : WORKER - Hello, I'm a worker
ERROR \d+ : WORKER - Hello, I'm a worker
ERROR \d+ : WORKER - Hello, I'm a worker
ERROR \d+ : Worker \d+ died
ERROR \d+ : Worker \d+ died
ERROR \d+ : Worker \d+ died
ERROR \d+ : Worker \d+ died

25
node_modules/log4node/test/cluster-sub-logger/test1.js generated vendored Normal file
View File

@ -0,0 +1,25 @@
var cluster = require('cluster'),
log4node = require('log4node'),
log = new log4node.Log4Node({prefix:'warning', file:'test.log'});
log.setPrefix("%l %p : ");
if (cluster.isMaster) {
for (var i = 0; i < 4; i++) {
cluster.fork();
}
log.error("Master started");
cluster.on('exit', function(worker) {
log.error('Worker ' + worker.process.pid + ' died');
});
} else {
var workerLog = log.clone({prefix: "WORKER - "});
workerLog.error("Hello, I'm a worker");
setTimeout(function() {
process.exit();
}, 100);
}

9
node_modules/log4node/test/cluster/output1 generated vendored Normal file
View File

@ -0,0 +1,9 @@
ERROR \d+ : Master started
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Hello, I'm a worker
ERROR \d+ : Worker \d+ died
ERROR \d+ : Worker \d+ died
ERROR \d+ : Worker \d+ died
ERROR \d+ : Worker \d+ died

23
node_modules/log4node/test/cluster/test1.js generated vendored Normal file
View File

@ -0,0 +1,23 @@
var cluster = require('cluster'),
log4node = require('log4node'),
log = new log4node.Log4Node({level: 'warning', file: 'test.log'});
log.setPrefix("%l %p : ");
if (cluster.isMaster) {
for (var i = 0; i < 4; i++) {
cluster.fork();
}
log.error("Master started");
cluster.on('exit', function(worker) {
log.error('Worker ' + worker.process.pid + ' died');
});
} else {
log.error("Hello, I'm a worker");
setTimeout(function() {
process.exit();
}, 100);
}

123
node_modules/log4node/test/helper.js generated vendored Normal file
View File

@ -0,0 +1,123 @@
var fs = require('fs'),
vows = require('vows'),
assert = require('assert'),
spawn = require('child_process').spawn,
whereis = require('whereis');
function launch(command, args, pid_file, callback) {
var child = spawn(command, args);
var stdout = '';
if (pid_file) {
fs.writeFile(pid_file, child.pid, function(err) {
if (err) {
return console.warn(err);
}
});
}
child.stdout.on('data', function (data) {
console.log('child stdout [' + command + ']: ' + data);
stdout += data;
});
child.stderr.on('data', function (data) {
console.log('child stderr [' + command + ']: ' + data);
});
child.on('exit', function(code) {
callback(code, stdout)
});
};
function remove_test_files() {
fs.readdirSync('.').forEach(function(i) {
if (i.match(/^test.log.*$/) || i.match(/^process.*/)) {
fs.unlinkSync(i);
}
});
if (fs.existsSync('/tmp/s')) {
fs.unlinkSync('/tmp/s');
}
}
function check_content(content, file) {
regexp = fs.readFileSync(file, 'utf-8');
if (!content.match(new RegExp("^" + regexp + "$"))) {
console.log("Content");
console.log(content);
console.log("Regexp");
console.log(regexp);
assert.fail("File not match");
}
}
function check_file(file, target_file) {
target_file = target_file || 'test.log';
content = fs.readFileSync(target_file, 'utf-8');
check_content(content, file);
}
function check_file_content(file, expected_content) {
content = fs.readFileSync(file, 'utf-8');
assert.equal(content, expected_content);
}
function create_test(name, file_to_launch, final_file, topic_callback, check_callback, test_callback) {
test_name = file_to_launch.match(/\/([^\/]+)\.js$/)[1]
test = {}
test[test_name] = {
topic: function () {
remove_test_files();
test_callback = test_callback || function(f, callback) {
launch('node', [f], 'process.pid', function(code, stdout) {
callback(null, code, stdout);
});
if (topic_callback) {
topic_callback();
}
};
test_callback(file_to_launch, this.callback);
},
'check_code': function(code) {
assert.equal(code, 0);
},
'check content': function () {
if (final_file) {
check_file(final_file);
}
},
}
if (check_callback) {
test[test_name]['specific_check'] = function(err, code, stdout) {
check_callback(stdout);
}
}
test[test_name]['remove test files'] = function() {
remove_test_files();
}
return vows.describe(name).addBatch(test);
}
function logrotate(callback) {
whereis('logrotate', function(err, res) {
if(err) {
console.log("You must have logrotate in your path to run all tests.");
return process.exit(1);
}
callback(res);
});
}
module.exports = {
launch: launch,
remove_test_files: remove_test_files,
check_file: check_file,
check_content: check_content,
check_file_content: check_file_content,
create_test: create_test,
logrotate: logrotate,
};

View File

@ -0,0 +1,7 @@
"test.log" {
rotate 5
weekly
postrotate
kill -USR2 `cat process1.pid` && kill -USR2 `cat process2.pid`
endscript
}

2
node_modules/log4node/test/multiple-appender/output1 generated vendored Normal file
View File

@ -0,0 +1,2 @@
p1 titi1
p2 titi1

2
node_modules/log4node/test/multiple-appender/output2 generated vendored Normal file
View File

@ -0,0 +1,2 @@
p1 titi2
p2 titi2

10
node_modules/log4node/test/multiple-appender/test1.js generated vendored Normal file
View File

@ -0,0 +1,10 @@
var log4node = require('log4node'),
log = new log4node.Log4Node({level: 'warning', file: 'test.log'});
log.setPrefix(process.argv[2] + " ");
log.warning("titi1");
setTimeout(function() {
log.warning("titi2")
}, 500);

1
node_modules/log4node/test/no-cluster-append/output1 generated vendored Normal file
View File

@ -0,0 +1 @@
WARNING - titi1

2
node_modules/log4node/test/no-cluster-append/output2 generated vendored Normal file
View File

@ -0,0 +1,2 @@
WARNING - titi1
WARNING - titi1

View File

@ -0,0 +1,7 @@
var log4node = require('log4node'),
log = new log4node.Log4Node({level: 'warning', file: 'test.log'});
log.setPrefix("%l - ");
log.warning("titi1");

View File

@ -0,0 +1,7 @@
"test.log" {
rotate 5
weekly
postrotate
kill -USR2 `cat process.pid`
endscript
}

View File

@ -0,0 +1 @@
\[WARNING - toto\] titi1

View File

@ -0,0 +1 @@
\[ERROR - toto\] titi2

View File

@ -0,0 +1,12 @@
var log4node = require('log4node'),
log = new log4node.Log4Node({level: 'warning', file: 'test.log'});
log.setPrefix("[%l - toto] ");
log.warning("titi1");
setTimeout(function() {
log.error("titi2")
}, 2000);

1
node_modules/log4node/test/no-cluster-sig/output1 generated vendored Normal file
View File

@ -0,0 +1 @@
\[WARNING - toto\] titi1

2
node_modules/log4node/test/no-cluster-sig/output2 generated vendored Normal file
View File

@ -0,0 +1,2 @@
\[WARNING - toto\] titi1
\[ERROR - toto\] titi2

12
node_modules/log4node/test/no-cluster-sig/test1.js generated vendored Normal file
View File

@ -0,0 +1,12 @@
var log4node = require('log4node'),
log = new log4node.Log4Node({level: 'warning', file: 'test.log'});
log.setPrefix("[%l - toto] ");
log.warning("titi1");
setTimeout(function() {
log.error("titi2")
}, 2000);

View File

@ -0,0 +1,2 @@
\[WARNING - toto\] titi1
\[ERROR - toto\] titi2

View File

@ -0,0 +1,11 @@
var log4node = require('log4node');
log4node.setPrefix("[%l - toto] ");
log4node.warning("titi1");
setTimeout(function() {
log4node.error("titi2")
}, 2000);

2
node_modules/log4node/test/no-cluster/output1 generated vendored Normal file
View File

@ -0,0 +1,2 @@
\[WARNING - toto\] titi1
\[WARNING - toto\] titi3

3
node_modules/log4node/test/no-cluster/output2 generated vendored Normal file
View File

@ -0,0 +1,3 @@
\[WARNING - toto\] titi1
\[WARNING - toto\] titi3
\[ERROR - toto\] titi2

13
node_modules/log4node/test/no-cluster/test1.js generated vendored Normal file
View File

@ -0,0 +1,13 @@
var log4node = require('log4node'),
log = new log4node.Log4Node({level: 'warning', file: 'test.log'});
log.setPrefix("[%l - toto] ");
log.warning("titi1");
setTimeout(function() {
log.error("titi2")
}, 500);
log.warning("titi3");

View File

@ -0,0 +1,2 @@
WARNING \d+ : SUB1 - titi1
WARNING \d+ : SUB1 - titi4

View File

@ -0,0 +1,3 @@
WARNING \d+ : SUB1 - titi1
WARNING \d+ : SUB1 - titi4
CRITICAL \d+ : SUB2 - titi2

15
node_modules/log4node/test/sub-logger-default/test1.js generated vendored Normal file
View File

@ -0,0 +1,15 @@
var log = require('log4node');
log.reconfigure({level: 'warning', file: 'test.log', prefix: "%l %p : "});
var sublogger1 = log.clone({prefix: "SUB1 - "});
var sublogger2 = log.clone({prefix: "SUB2 - ", level: 'error'});
sublogger1.warning("titi1");
setTimeout(function() {
sublogger2.critical("titi2");
sublogger2.warning("titi3");
}, 500);
sublogger1.warning("titi4");

2
node_modules/log4node/test/sub-logger/output1 generated vendored Normal file
View File

@ -0,0 +1,2 @@
WARNING \d+ : SUB1 - titi1
WARNING \d+ : SUB1 - titi4

3
node_modules/log4node/test/sub-logger/output2 generated vendored Normal file
View File

@ -0,0 +1,3 @@
WARNING \d+ : SUB1 - titi1
WARNING \d+ : SUB1 - titi4
CRITICAL \d+ : SUB2 - titi2

16
node_modules/log4node/test/sub-logger/test1.js generated vendored Normal file
View File

@ -0,0 +1,16 @@
var log4node = require('log4node'),
log = new log4node.Log4Node({level: 'warning', file: 'test.log'});
log.setPrefix("%l %p : ");
var sublogger1 = log.clone({prefix: "SUB1 - "});
var sublogger2 = log.clone({prefix: "SUB2 - ", level: 'error'});
sublogger1.warning("titi1");
setTimeout(function() {
sublogger2.critical("titi2");
sublogger2.warning("titi3");
}, 500);
sublogger1.warning("titi4");

View File

@ -0,0 +1,3 @@
var helper = require('./helper.js');
helper.create_test('cluster-logger-after-fork', 'cluster-logger-after-fork/test1.js', 'cluster-logger-after-fork/output1').export(module);

12
node_modules/log4node/test/test-cluster-logrotate.js generated vendored Normal file
View File

@ -0,0 +1,12 @@
var helper = require('./helper.js');
helper.create_test('cluster-logrotate', 'cluster-logrotate/test1.js', 'cluster-logrotate/output2', function() {
helper.logrotate(function(logrotate) {
setTimeout(function() {
helper.check_file("cluster-logrotate/output1");
helper.launch(logrotate, ['-f', 'cluster-logrotate/logrotate.conf', '-s', '/tmp/s'], null, function(code) {});
}, 500);
});
}, function() {
helper.check_file("cluster-logrotate/output1", "test.log.1");
}).export(module);

14
node_modules/log4node/test/test-cluster-stdout-sig.js generated vendored Normal file
View File

@ -0,0 +1,14 @@
var helper = require('./helper.js'),
fs = require('fs');
helper.create_test('cluster-stdout-sig', 'cluster-stdout-sig/test1.js', null, function() {
helper.logrotate(function(logrotate) {
setTimeout(function() {
helper.launch("kill", ['-USR2', fs.readFileSync('process.pid')], null, function(code) {
assert.equal(code, 0);
});
}, 500);
});
}, function(stdout) {
helper.check_content(stdout, 'cluster-stdout-sig/output1');
}).export(module);

View File

@ -0,0 +1,12 @@
var helper = require('./helper.js');
helper.create_test('cluster-sub-logger-logrotate', 'cluster-sub-logger-logrotate/test1.js', 'cluster-sub-logger-logrotate/output2', function() {
helper.logrotate(function(logrotate) {
setTimeout(function() {
helper.check_file("cluster-sub-logger-logrotate/output1");
helper.launch(logrotate, ['-f', 'cluster-sub-logger-logrotate/logrotate.conf', '-s', '/tmp/s'], null, function(code) {});
}, 500);
});
}, function() {
helper.check_file("cluster-sub-logger-logrotate/output1", "test.log.1");
}).export(module);

View File

@ -0,0 +1,3 @@
var helper = require('./helper.js');
helper.create_test('cluster', 'cluster-sub-logger/test1.js', 'cluster-sub-logger/output1', function() {}).export(module);

15
node_modules/log4node/test/test-cluster.js generated vendored Normal file
View File

@ -0,0 +1,15 @@
var helper = require('./helper.js');
helper.create_test('cluster-logrotate', 'cluster-logrotate/test1.js', 'cluster-logrotate/output2', function() {
helper.logrotate(function(logrotate) {
setTimeout(function() {
helper.check_file("cluster-logrotate/output1");
helper.launch(logrotate, ['-f', 'cluster-logrotate/logrotate.conf', '-s', '/tmp/s'], null, function(code) {});
}, 500);
});
}, function() {
helper.check_file("cluster-logrotate/output1", "test.log.1");
}).export(module);
var helper = require('./helper.js');
helper.create_test('cluster', 'cluster/test1.js', 'cluster/output1', function() {}).export(module);

29
node_modules/log4node/test/test-multiple-appender.js generated vendored Normal file
View File

@ -0,0 +1,29 @@
var helper = require('./helper.js'),
assert = require('assert');
helper.create_test('multiple-appender', 'multiple-appender/test1.js', 'multiple-appender/output2', null, function() {
helper.check_file('test.log.1', 'multiple-appender/output1');
}, function(f, callback) {
var process1_ok = false;
var process2_ok = false;
helper.launch('node', [f, 'p1'], 'process1.pid', function(code) {
assert.equal(code, 0);
process2_ok = true;
});
setTimeout(function() {
helper.launch('node', [f, 'p2'], 'process2.pid', function(code) {
assert.equal(code, 0);
process1_ok = true;
});
}, 20);
helper.logrotate(function(logrotate) {
setTimeout(function() {
helper.launch(logrotate, ['-f', 'multiple-appender/logrotate.conf', '-s', '/tmp/s'], null, function(code) {});
}, 200);
});
setTimeout(function() {
assert(process1_ok);
assert(process2_ok);
callback(undefined, 0);
}, 1000);
}).export(module);

12
node_modules/log4node/test/test-no-cluster-append.js generated vendored Normal file
View File

@ -0,0 +1,12 @@
var helper = require('./helper.js'),
assert = require('assert');
helper.create_test('no-cluster-append', 'no-cluster-append/test1.js', 'no-cluster-append/output2', null, null, function(f, callback) {
helper.launch('node', [f], null, function(code) {
assert.equal(code, 0);
helper.check_file('no-cluster-append/output1');
helper.launch('node', [f], null, function(code) {
callback(null, code);
});
});
}).export(module);

View File

@ -0,0 +1,12 @@
var helper = require('./helper.js');
helper.create_test('no-cluster-logrotate', 'no-cluster-logrotate/test1.js', 'no-cluster-logrotate/output2', function() {
helper.logrotate(function(logrotate) {
setTimeout(function() {
helper.check_file("no-cluster-logrotate/output1");
helper.launch(logrotate, ['-f', 'no-cluster-logrotate/logrotate.conf', '-s', '/tmp/s'], null, function(code) {});
}, 200);
});
}, function() {
helper.check_file("no-cluster-logrotate/output1", "test.log.1");
}).export(module);

12
node_modules/log4node/test/test-no-cluster-sig.js generated vendored Normal file
View File

@ -0,0 +1,12 @@
var helper = require('./helper.js'),
assert = require('assert'),
fs = require('fs');
helper.create_test('no-cluster-sig', 'no-cluster-sig/test1.js', 'no-cluster-sig/output2', function() {
setTimeout(function() {
helper.check_file("no-cluster-sig/output1");
helper.launch("kill", ['-USR2', fs.readFileSync('process.pid')], null, function(code) {
assert.equal(code, 0);
});
}, 200);
}).export(module);

View File

@ -0,0 +1,13 @@
var helper = require('./helper.js'),
assert = require('assert'),
fs = require('fs');
helper.create_test('no-cluster-stdout-sig', 'no-cluster-stdout-sig/test1.js', null, function() {
setTimeout(function() {
helper.launch("kill", ['-USR2', fs.readFileSync('process.pid')], null, function(code) {
assert.equal(code, 0);
});
}, 200);
}, function(stdout) {
helper.check_content(stdout, 'no-cluster-stdout-sig/output1');
}).export(module);

7
node_modules/log4node/test/test-no-cluster.js generated vendored Normal file
View File

@ -0,0 +1,7 @@
var helper = require('./helper.js');
helper.create_test('no-cluster', 'no-cluster/test1.js', 'no-cluster/output2', function() {
setTimeout(function() {
helper.check_file("no-cluster/output1");
}, 200);
}).export(module);

33
node_modules/log4node/test/test-not-reopening-file.js generated vendored Normal file
View File

@ -0,0 +1,33 @@
var cluster = require('cluster'),
vows = require('vows'),
assert = require('assert'),
log4node = require('log4node');
vows.describe('Test not reopening file').addBatch({
'is not called when a worker process is disconnected': {
'topic': function() {
// setup process as a worker process
cluster.isMaster = false;
var calls = 0;
process.send = function(args) {
calls ++;
};
process.connected = true;
log4node.info('log me baby');
log4node.info('log me baby 2 times');
// when disconnected (ie, master dies)
process.connected = false;
log4node.info('log me baby');
return calls;
},
'check': function(calls) {
assert.equal(calls, 2);
}
}
}).export(module);

33
node_modules/log4node/test/test-send-master.js generated vendored Normal file
View File

@ -0,0 +1,33 @@
var cluster = require('cluster'),
vows = require('vows'),
assert = require('assert'),
log4node = require('log4node');
vows.describe('Test process.send').addBatch({
'is not called when a worker process is disconnected': {
'topic': function() {
// setup process as a worker process
cluster.isMaster = false;
var calls = 0;
process.send = function(args) {
calls ++;
};
process.connected = true;
log4node.info('log me baby');
log4node.info('log me baby 2 times');
// when disconnected (ie, master dies)
process.connected = false;
log4node.info('log me baby');
return calls;
},
'check': function(calls) {
assert.equal(calls, 2);
}
}
}).export(module);

30
node_modules/log4node/test/test-set-loglevel.js generated vendored Normal file
View File

@ -0,0 +1,30 @@
var helper = require('./helper.js'),
vows = require('vows'),
assert = require('assert'),
log4node = require('log4node');
vows.describe('Test ').addBatch({
'set log level': {
'topic': function() {
var logger = new log4node.Log4Node({level: 'info', file: 'test.log'});
logger.setPrefix('');
logger.debug('start_debug');
logger.info('start');
logger.setLogLevel('critical');
logger.info('stop');
logger.critical('stop_critical')
var callback = this.callback;
setTimeout(function() {
callback(null);
}, 200);
},
'check': function(err) {
assert.ifError(err);
helper.check_file_content('test.log', 'start\nstop_critical\n');
helper.remove_test_files();
}
}
}).export(module);

162
node_modules/log4node/test/test-set-prefix.js generated vendored Normal file
View File

@ -0,0 +1,162 @@
var helper = require('./helper.js'),
vows = require('vows'),
assert = require('assert'),
log4node = require('log4node'),
util = require('util');
vows.describe('Test ').addBatch({
'set string prefix': {
topic: function() {
var logger = new log4node.Log4Node({
level: 'info',
file: 'test.log',
prefix: '%l '
});
logger.info('start');
var callback = this.callback;
setTimeout(function() {
callback(null);
}, 200);
},
check: function(err) {
assert.ifError(err);
helper.check_file_content('test.log', 'INFO start\n');
helper.remove_test_files();
}
},
}).addBatch({
'set string prefix inheritance': {
topic: function() {
var parent_logger = new log4node.Log4Node({
level: 'info',
file: 'test.log',
prefix: '%l '
});
var logger = new log4node.Log4Node({parent: parent_logger, prefix: 'sub '});
logger.info('start');
var callback = this.callback;
setTimeout(function() {
callback(null);
}, 200);
},
check: function(err) {
assert.ifError(err);
helper.check_file_content('test.log', 'INFO sub start\n');
helper.remove_test_files();
}
},
}).addBatch({
'set string prefix inheritance with no prefix value': {
topic: function() {
var parent_logger = new log4node.Log4Node({
level: 'info',
file: 'test.log',
prefix: '%l '
});
var logger = new log4node.Log4Node({parent: parent_logger});
logger.info('start');
var callback = this.callback;
setTimeout(function() {
callback(null);
}, 200);
},
check: function(err) {
assert.ifError(err);
helper.check_file_content('test.log', 'INFO start\n');
helper.remove_test_files();
}
},
}).addBatch({
'set function prefix': {
topic: function() {
var v = Math.random();
var logger = new log4node.Log4Node({
level: 'info',
file: 'test.log',
prefix: function(level) {
return util.format('[ %d ] %s ', v, level.toUpperCase());
}
});
logger.info('start');
var callback = this.callback;
setTimeout(function() {
callback(null, v);
}, 200);
},
check: function(err, v) {
assert.ifError(err);
helper.check_file_content('test.log', '[ ' + v + ' ] INFO start\n');
helper.remove_test_files();
}
},
}).addBatch({
'set function prefix inheritance default value': {
topic: function() {
var v = Math.random();
var parent_logger = new log4node.Log4Node({
level: 'info',
file: 'test.log',
prefix: function(level) {
return util.format('[ %d ] %s ', v, level.toUpperCase());
}
});
var logger = new log4node.Log4Node({parent: parent_logger});
logger.info('start');
var callback = this.callback;
setTimeout(function() {
callback(null, v);
}, 200);
},
check: function(err, v) {
assert.ifError(err);
helper.check_file_content('test.log', '[ ' + v + ' ] INFO start\n');
helper.remove_test_files();
}
},
}).addBatch({
'set function prefix inheritance with function': {
topic: function() {
var v = Math.random();
var parent_logger = new log4node.Log4Node({
level: 'info',
file: 'test.log',
prefix: function(level) {
return util.format('[ %d ] %s ', v, level.toUpperCase());
}
});
var logger = new log4node.Log4Node({parent: parent_logger, prefix: function() {return 'tata ';}});
logger.info('start');
var callback = this.callback;
setTimeout(function() {
callback(null, v);
}, 200);
},
check: function(err, v) {
assert.ifError(err);
helper.check_file_content('test.log', '[ ' + v + ' ] INFO tata start\n');
helper.remove_test_files();
}
},
}).export(module);

28
node_modules/log4node/test/test-strange-params.js generated vendored Normal file
View File

@ -0,0 +1,28 @@
var helper = require('./helper.js'),
vows = require('vows'),
assert = require('assert'),
log4node = require('log4node');
vows.describe('Test strange params').addBatch({
'when calling log.info': {
'topic': function() {
var logger = new log4node.Log4Node({level: 'info', file: 'test.log'});
logger.setPrefix('');
logger.info('log me baby', 2, 5);
logger.info(undefined);
logger.info(null);
var callback = this.callback;
setTimeout(function() {
callback(null);
}, 200);
},
'check': function(err) {
assert.ifError(err);
helper.check_file_content('test.log', 'log me baby 2 5\nundefined\nnull\n');
helper.remove_test_files();
}
}
}).export(module);

View File

@ -0,0 +1,9 @@
var helper = require('./helper.js');
helper.create_test('sub-logger-default', 'sub-logger-default/test1.js', 'sub-logger-default/output2', function() {
setTimeout(function() {
helper.check_file("sub-logger-default/output1");
}, 200);
}).export(module);

9
node_modules/log4node/test/test-sub-logger.js generated vendored Normal file
View File

@ -0,0 +1,9 @@
var helper = require('./helper.js');
helper.create_test('sub-logger', 'sub-logger/test1.js', 'sub-logger/output2', function() {
setTimeout(function() {
helper.check_file("sub-logger/output1");
}, 200);
}).export(module);