2012-02-22 11:37:45 +08:00
# log4js-node [![Build Status](https://secure.travis-ci.org/nomiddlename/log4js-node.png?branch=master)](http://travis-ci.org/nomiddlename/log4js-node)
2010-01-17 09:08:28 +08:00
2011-09-15 06:13:04 +08:00
2011-10-27 10:12:36 +08:00
This is a conversion of the [log4js ](http://log4js.berlios.de/index.html )
2012-06-01 16:12:30 +08:00
framework to work with [node ](http://nodejs.org ). I've mainly stripped out the browser-specific code and tidied up some of the javascript.
Out of the box it supports the following features:
* coloured console logging
* replacement of node's console.log functions (optional)
* file appender, with log rolling based on file size
* SMTP appender
* GELF appender
* hook.io appender
* multiprocess appender (useful when you've got worker processes)
* a logger for connect/express servers
* configurable log message layout/patterns
* different log levels for different log categories (make some parts of your app log as DEBUG, others only ERRORS, etc.)
2011-04-17 15:48:51 +08:00
2012-06-04 07:18:58 +08:00
NOTE: from log4js 0.5 onwards you'll need to explicitly enable replacement of node's console.log functions. Do this either by calling `log4js.replaceConsole()` or configuring with an object or json file like this:
```javascript
{
appenders: [
{ type: "console" }
],
replaceConsole: true
}
```
2011-04-17 15:48:51 +08:00
2010-08-10 20:02:27 +08:00
## installation
npm install log4js
2010-01-17 09:08:28 +08:00
## usage
2010-12-05 07:56:09 +08:00
Minimalist version:
2011-04-17 16:25:00 +08:00
2011-07-13 16:29:53 +08:00
var log4js = require('log4js');
2010-12-05 07:56:09 +08:00
var logger = log4js.getLogger();
logger.debug("Some debug messages");
2011-04-17 16:25:00 +08:00
2010-12-05 14:17:37 +08:00
By default, log4js outputs to stdout with the coloured layout (thanks to [masylum ](http://github.com/masylum )), so for the above you would see:
2011-04-17 16:25:00 +08:00
2010-12-05 07:56:09 +08:00
[2010-01-17 11:43:37.987] [DEBUG] [default] - Some debug messages
2012-06-29 07:37:41 +08:00
See example.js for a full example, but here's a snippet (also in fromreadme.js):
2010-01-17 09:08:28 +08:00
2012-06-01 16:12:30 +08:00
var log4js = require('log4js');
2012-06-29 07:37:41 +08:00
//console log is loaded by default, so you won't normally need to do this
//log4js.loadAppender('console');
2012-06-01 16:12:30 +08:00
log4js.loadAppender('file');
2012-06-29 07:37:41 +08:00
//log4js.addAppender(log4js.appenders.console());
2012-06-01 16:12:30 +08:00
log4js.addAppender(log4js.appenders.file('logs/cheese.log'), 'cheese');
2011-10-27 10:12:36 +08:00
2010-01-17 09:26:55 +08:00
var logger = log4js.getLogger('cheese');
logger.setLevel('ERROR');
2011-10-27 10:12:36 +08:00
2010-01-17 09:26:55 +08:00
logger.trace('Entering cheese testing');
logger.debug('Got cheese.');
2011-10-27 10:12:36 +08:00
logger.info('Cheese is Gouda.');
2010-01-17 09:26:55 +08:00
logger.warn('Cheese is quite smelly.');
logger.error('Cheese is too ripe!');
logger.fatal('Cheese was breeding ground for listeria.');
2011-10-27 10:12:36 +08:00
2011-04-17 16:25:00 +08:00
Output:
2010-01-17 09:28:22 +08:00
[2010-01-17 11:43:37.987] [ERROR] cheese - Cheese is too ripe!
[2010-01-17 11:43:37.990] [FATAL] cheese - Cheese was breeding ground for listeria.
2012-06-01 16:12:30 +08:00
The first 5 lines of the code above could also be written as:
2010-01-17 09:08:28 +08:00
2012-06-01 16:12:30 +08:00
var log4js = require('log4js');
log4js.configure({
appenders: [
{ type: 'console' },
{ type: 'file', filename: 'logs/cheese.log', category: 'cheese' }
]
});
2011-10-27 10:12:36 +08:00
2010-01-17 09:08:28 +08:00
## configuration
2012-06-01 16:12:30 +08:00
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.
2011-07-22 12:43:33 +08:00
An example file can be found in `test/log4js.json` . An example config file with log rolling is in `test/with-log-rolling.json` .
2012-06-01 16:12:30 +08:00
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.
2011-07-22 12:43:33 +08:00
2011-07-22 13:59:17 +08:00
To turn off configuration file change checking, configure with:
2011-07-25 11:16:56 +08:00
var log4js = require('log4js');
log4js.configure('my_log4js_configuration.json', {});
2011-07-22 13:59:17 +08:00
To specify a different period:
2012-06-01 16:12:30 +08:00
log4js.configure('file.json', { reloadSecs: 300 });
2010-01-17 09:08:28 +08:00
2012-02-08 12:55:14 +08:00
For FileAppender you can also pass the path to the log directory as an option where all your log files would be stored.
log4js.configure('my_log4js_configuration.json', { cwd: '/absolute/path/to/log/dir' });
If you have already defined an absolute path for one of the FileAppenders in the configuration file, you could add a "absolute": true to the particular FileAppender to override the cwd option passed. Here is an example configuration file:
#### my_log4js_configuration.json ####
{
"appenders": [
{
"type": "file",
"filename": "relative/path/to/log_file.log",
"maxLogSize": 20480,
"backups": 3,
"category": "relative-logger"
},
{
"type": "file",
"absolute": true,
"filename": "/absolute/path/to/log_file.log",
"maxLogSize": 20480,
"backups": 10,
"category": "absolute-logger"
}
]
}
2012-06-01 16:12:30 +08:00
2012-06-01 16:15:55 +08:00
Documentation for most of the core appenders can be found on the [wiki ](log4js-node/wiki/Appenders ), otherwise take a look at the tests and the examples.
2012-02-08 12:55:14 +08:00
2012-06-01 16:12:30 +08:00
## Documentation
2012-06-01 16:15:55 +08:00
See the [wiki ](log4js-node/wiki ). Improve the [wiki ](log4js-node/wiki ), please.
2010-01-17 09:08:28 +08:00
2012-06-01 16:12:30 +08:00
## Contributing
2012-06-01 16:15:55 +08:00
Contributions welcome, but take a look at the [rules ](log4js-node/wiki/Contributing ) first.
2010-01-17 09:08:28 +08:00
## License
The original log4js was distributed under the Apache 2.0 License, and so is this. I've tried to
2011-10-27 10:12:36 +08:00
keep the original copyright and author credits in place, except in sections that I have rewritten
2010-01-17 09:08:28 +08:00
extensively.