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
2014-01-11 03:47:48 +08:00
* Loggly appender
2012-06-01 16:12:30 +08:00
* 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
{
2013-01-20 05:05:15 +08:00
appenders: [
{ type: "console" }
],
replaceConsole: true
2012-06-04 07:18:58 +08:00
}
```
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:
2013-01-06 08:09:55 +08:00
```javascript
var log4js = require('log4js');
var logger = log4js.getLogger();
logger.debug("Some debug messages");
```
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:
2013-01-20 05:05:15 +08:00
```bash
[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):
2013-01-06 08:09:55 +08:00
```javascript
var log4js = require('log4js');
//console log is loaded by default, so you won't normally need to do this
//log4js.loadAppender('console');
log4js.loadAppender('file');
//log4js.addAppender(log4js.appenders.console());
log4js.addAppender(log4js.appenders.file('logs/cheese.log'), 'cheese');
2013-01-20 05:05:15 +08:00
2013-01-06 08:09:55 +08:00
var logger = log4js.getLogger('cheese');
logger.setLevel('ERROR');
logger.trace('Entering cheese testing');
logger.debug('Got cheese.');
logger.info('Cheese is Gouda.');
logger.warn('Cheese is quite smelly.');
logger.error('Cheese is too ripe!');
logger.fatal('Cheese was breeding ground for listeria.');
```
2011-04-17 16:25:00 +08:00
Output:
2013-01-20 05:05:15 +08:00
```bash
[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:
2013-01-06 08:09:55 +08:00
```javascript
var log4js = require('log4js');
log4js.configure({
2013-01-20 05:05:15 +08:00
appenders: [
{ type: 'console' },
{ type: 'file', filename: 'logs/cheese.log', category: 'cheese' }
]
2013-01-06 08:09:55 +08:00
});
```
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
2012-10-16 05:36:26 +08:00
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`).
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:
2013-01-06 08:09:55 +08:00
```javascript
var log4js = require('log4js');
log4js.configure('my_log4js_configuration.json', {});
```
2011-07-22 13:59:17 +08:00
To specify a different period:
2013-01-06 08:09:55 +08:00
```javascript
log4js.configure('file.json', { reloadSecs: 300 });
```
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.
2013-01-06 08:09:55 +08:00
```javascript
log4js.configure('my_log4js_configuration.json', { cwd: '/absolute/path/to/log/dir' });
```
2012-02-08 12:55:14 +08:00
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:
2013-01-20 05:05:15 +08:00
```json
#### my_log4js_configuration.json ####
{
"appenders": [
2012-02-08 12:55:14 +08:00
{
2013-01-20 05:05:15 +08:00
"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-02-08 12:55:14 +08:00
}
2013-01-20 05:05:15 +08:00
]
}
```
2013-03-20 16:47:32 +08:00
Documentation for most of the core appenders can be found on the [wiki ](https://github.com/nomiddlename/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
2013-03-20 16:47:32 +08:00
See the [wiki ](https://github.com/nomiddlename/log4js-node/wiki ). Improve the [wiki ](https://github.com/nomiddlename/log4js-node/wiki ), please.
2010-01-17 09:08:28 +08:00
2012-06-01 16:12:30 +08:00
## Contributing
2013-03-20 16:47:32 +08:00
Contributions welcome, but take a look at the [rules ](https://github.com/nomiddlename/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.