From ad63b801f74a2ab638ad7f7957a36268617f66a0 Mon Sep 17 00:00:00 2001 From: Daniel Bell Date: Tue, 16 Oct 2012 08:36:26 +1100 Subject: [PATCH] Check environment variable LOG4JS_CONFIG for configuration file location. --- README.md | 12 ++++++----- lib/log4js.js | 3 ++- test/configuration-test.js | 42 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 660856d..816a905 100644 --- a/README.md +++ b/README.md @@ -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. diff --git a/lib/log4js.js b/lib/log4js.js index ed23506..6c3ce0d 100644 --- a/lib/log4js.js +++ b/lib/log4js.js @@ -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); diff --git a/test/configuration-test.js b/test/configuration-test.js index 3955b7c..5433466 100644 --- a/test/configuration-test.js +++ b/test/configuration-test.js @@ -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);