Permalink
Browse files

Check environment variable LOG4JS_CONFIG for configuration file locat…

…ion.
  • Loading branch information...
1 parent 2bfad63 commit ad63b801f74a2ab638ad7f7957a36268617f66a0 @danbell danbell committed Oct 15, 2012
Showing with 51 additions and 6 deletions.
  1. +7 −5 README.md
  2. +2 −1 lib/log4js.js
  3. +42 −0 test/configuration-test.js
View
@@ -73,17 +73,19 @@ The first 5 lines of the code above could also be written as:
var log4js = require('log4js');
log4js.configure({
- appenders: [
- { type: 'console' },
- { type: 'file', filename: 'logs/cheese.log', category: 'cheese' }
- ]
+ appenders: [
+ { type: 'console' },
+ { type: 'file', filename: 'logs/cheese.log', category: 'cheese' }
+ ]
});
## configuration
You can configure the appenders and log levels manually (as above), or provide a
-configuration file (`log4js.configure('path/to/file.json')`), or a configuration object.
+configuration file (`log4js.configure('path/to/file.json')`), or a configuration object. The
+configuration file location may also be specified via the environment variable
+LOG4JS_CONFIG (`export LOG4JS_CONFIG=path/to/file.json`).
An example file can be found in `test/log4js.json`. An example config file with log rolling is in `test/with-log-rolling.json`.
By default, the configuration file is checked for changes every 60 seconds, and if changed, reloaded. This allows changes to logging levels to occur without restarting the application.
View
@@ -240,8 +240,9 @@ function initReloadConfiguration(filename, options) {
function configure(configurationFileOrObject, options) {
var config = configurationFileOrObject;
+ config = config || process.env.LOG4JS_CONFIG;
options = options || {};
-
+
if (config === undefined || config === null || typeof(config) === 'string') {
if (options.reloadSecs) {
initReloadConfiguration(config, options);
View
@@ -84,6 +84,48 @@ vows.describe('log4js configure').addBatch({
'should add appender configure function to appenderMakers': function(log4js) {
assert.isFunction(log4js.appenderMakers['some/other/external']);
}
+ },
+ 'when configuration file loaded via LOG4JS_CONFIG environment variable': {
+ topic: function() {
+ process.env.LOG4JS_CONFIG = 'some/path/to/mylog4js.json';
+ var fileRead = 0,
+ modulePath = 'some/path/to/mylog4js.json',
+ pathsChecked = [],
+ mtime = new Date(),
+ fakeFS = {
+ config: { appenders: [ { type: 'console', layout: { type: 'messagePassThrough' } } ],
+ levels: { 'a-test' : 'INFO' } },
+ readdirSync: function(dir) {
+ return require('fs').readdirSync(dir);
+ },
+ readFileSync: function (file, encoding) {
+ fileRead += 1;
+ assert.isString(file);
+ assert.equal(file, modulePath);
+ assert.equal(encoding, 'utf8');
+ return JSON.stringify(fakeFS.config);
+ },
+ statSync: function (path) {
+ pathsChecked.push(path);
+ if (path === modulePath) {
+ return { mtime: mtime };
+ } else {
+ throw new Error("no such file");
+ }
+ }
+ },
+ log4js = sandbox.require('../lib/log4js',
+ {
+ requires: {
+ 'fs': fakeFS,
+ }
+ });
+
+ return fileRead;
+ },
+ 'should load the specified local configuration file' : function(fileRead) {
+ assert.equal(fileRead, 1);
+ }
}
}
}).exportTo(module);

0 comments on commit ad63b80

Please sign in to comment.