https://github.com/dalee/node-logger
Vanilla Node.js, Hapi.js and Express.js logger (Syslog over UDP4 and Console), build with Babel6
https://github.com/dalee/node-logger
console express-middleware hapi-plugin logger logging logging-library logstash syslog udp
Last synced: 8 months ago
JSON representation
Vanilla Node.js, Hapi.js and Express.js logger (Syslog over UDP4 and Console), build with Babel6
- Host: GitHub
- URL: https://github.com/dalee/node-logger
- Owner: Dalee
- License: mit
- Created: 2016-12-29T14:17:52.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2018-06-27T15:21:25.000Z (over 7 years ago)
- Last Synced: 2025-04-09T22:43:39.439Z (10 months ago)
- Topics: console, express-middleware, hapi-plugin, logger, logging, logging-library, logstash, syslog, udp
- Language: JavaScript
- Homepage:
- Size: 64.5 KB
- Stars: 0
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# dalee-logger
[](https://travis-ci.org/Dalee/node-logger)
[](https://codecov.io/gh/Dalee/node-logger)
[](https://david-dm.org/Dalee/node-logger)
Great for Docker/Kubernetes environments.
> Currently in production testing phase.
Key features:
* Minimal configuration required
* Bundled framework support:
* [hapi.js](https://hapijs.com/) `>= v15.2.0`
* [express.js](http://expressjs.com/) `>= v4.0.0`
* General `uncaughtException` and `unhandledRejection` handling (process will be terminated)
* Console writer (enabled by default)
* Syslog [RFC3164](https://www.ietf.org/rfc/rfc3164.txt) udp4 writer
## Usage
`npm i dalee-logger --save`
### Configuration
Global configuration options:
* `facility` - facility, default value: `1` (`USER`) (syslog parameter)
* `severity` - severity for events logged with `log` method, default value: `debug`
* `hostname` - hostname (syslog parameter), default value: `os.hostname()`
* `app` - application name (syslog parameter), default value: `path.basename(process.title)`
* `logger_level` - output event level, possible values are:
* `emerg`
* `alert`
* `critical`
* `error`
* `warning`
* `notice`
* `info`
* `debug`
> `logger_level` also can be set via environment variable `LOGGER_LEVEL`
### Adapter configuration
#### Console
* `enabled` - true/false, should console be silent or not, default is `true`
Sample output:
```
[2016-11-26 13:52:45.2342] debug: Hello world
```
#### Syslog
* `host` - valid fqdn or ip address of Syslog/Logstash daemon
* `port` - udp4 port number
Sample output (udp4 packet):
```
<0>2016-11-26 23:23:23.4554 localhost app: hello world
```
### Standalone
```
import Logger from 'dalee-logger';
Logger.setParameters({ app: 'node' });
Logger.addAdapter(Logger.Console, {});
Logger.addAdapter(Logger.Syslog, {
'host': 'example.com',
'port': 514
});
Logger.debug('Will write to console and send UDP syslog packet');
```
### hapi.js
#### hapi `>= 17.0.0`
Register as plugin in `manifest.js`:
```
plugin: {
plugin: 'dalee-logger/hapi-17',
options: {
app: 'node-daemon',
hostname: 'example.com',
console: {
enabled: true
},
syslog: {
host: 'example.com',
port: 514
}
}
}
```
#### hapi `>= 15.2.0` `< 17.0.0`
Register as plugin in `manifest.js`:
```
plugin: {
register: 'dalee-logger/hapi',
options: {
app: 'node-daemon',
hostname: 'example.com',
console: {
enabled: true
},
syslog: {
host: 'example.com',
port: 514
}
}
}
```
### express.js
Register as express middleware:
```
import express from 'express';
import expressLogger from 'dalee-logger/express';
const app = express();
const logger = expressLogger({
app: 'node-daemon',
hostname: 'example.com',
console: {
enabled: true
},
syslog: {
host: 'example.com',
port: 514
}
});
app.use(logger);
app.get('/', function(req,res) {
req.log('notice', 'The next message will be error');
undefined.error = 'Force error';
});
app.use(logger.errorLogger);
app.listen(80, () => {
logger.log('debug', 'server started');
});
```
## Sample Logstash configuration
> Check out our [ELK-playground](https://github.com/Dalee/elk-playground) project
* Logstash will listen on port `5000` for udp packets
* Successfully parsed message will go into index named `logstash-{syslog_program}`
* Every unparsed line will go to index named `logstash-error`
* Logstash will write to Elastic on `localhost:9200`
```
input {
udp {
port => 5000
type => syslog
}
}
filter {
grok {
match => { "message" => "<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "index_type", "%{syslog_program}" ]
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss.SSS" ]
locale => "en"
timezone => "Europe/Moscow"
target => "@timestamp"
}
syslog_pri {
}
# every unparsed line will go to logstash-error index
if "_grokparsefailure" in [tags] {
mutate {
add_field => [ "index_type", "error" ]
}
}
}
output {
elasticsearch {
# flush_size = 1 set only for debugging purposes, should be > 1 on production
flush_size => 1
hosts => ["localhost:9200"]
index => "logstash-%{index_type}"
}
stdout {
# this should be disabled in production environment
codec => rubydebug
}
}
```
## License
Software licensed under the [MIT License](http://www.opensource.org/licenses/MIT).