# fh-logger

> Enables a simple way of configuring and creating loggers, configured with request serializers, including clustering information.

Latest version **1.0.0** (published 2018-08-21) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install fh-logger
pnpm add fh-logger
yarn add fh-logger
bun add fh-logger
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2018-08-21 |
| First published | 2015-10-12 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=0.8 |
| Dependencies | 3 |
| Unpacked size | 317.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Red Hat |
| Maintainers | dbevenius, feedhenry, feedhenry-dev, grdryn, wtrocki |

## Links

- npm: https://www.npmjs.com/package/fh-logger
- Repository: https://github.com/feedhenry/fh-logger
- Homepage: https://github.com/feedhenry/fh-logger#readme
- Issues: https://github.com/feedhenry/fh-logger/issues
- npm.io page: https://npm.io/package/fh-logger

## Dependencies (3)

- [node-uuid](https://npm.io/package/node-uuid.md) ^1.4.7
- [bunyan-lite](https://npm.io/package/bunyan-lite.md) ^1.0.1
- [continuation-local-storage](https://npm.io/package/continuation-local-storage.md) ^3.1.7

## Recent versions

- 1.0.0 (latest) — 2018-08-21
- 0.5.5-rc4 (next) — 2018-08-17
- 0.5.5 — 2018-08-20
- 0.5.5-rc5 — 2018-08-20
- 0.5.5-rc3 — 2018-08-17
- 0.5.5-rc2 — 2018-08-17
- 0.5.5-rc1 — 2018-08-17
- 0.5.4 — 2018-08-17
- 0.5.2 — 2016-08-30
- 0.5.1 — 2016-08-03
- 0.5.0 — 2016-07-22
- 0.4.0 — 2015-11-26
- 0.3.0 — 2015-10-19
- 0.2.0 — 2015-10-15
- 0.1.0 — 2015-10-12

## README

## fh-logger

[![npm package](https://nodei.co/npm/fh-logger.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/fh-logger/)

[![Build status](https://img.shields.io/travis/feedhenry/fh-logger/master.svg?style=flat-square)](https://travis-ci.org/feedhenry/fh-logger)
[![Dependency Status](https://img.shields.io/david/feedhenry/fh-logger.svg?style=flat-square)](https://david-dm.org/feedhenry/fh-logger)
[![Known Vulnerabilities](https://snyk.io/test/npm/fh-logger/badge.svg?style=flat-square)](https://snyk.io/test/npm/fh-logger)

Enables a simple way of configuring and creating [Bunyan](https://github.com/trentm/node-bunyan) loggers, configured with request serializers, including clustering information.

### Install
```shell
npm install fh-logger
```

### Usage


#### JavaScript object configuration  

```javascript
var fh_logger = require('fh-logger');
var logger = fh_logger.createLogger({name: 'first'});
```
This will produce a Bunyan logger that will have a request serializer, and will log to ```process.stdout```.


#### String configuration
You can pass in a JSON string containing your logger configuration. This is useful if you define your logger configuration externally to your code, for example in a .json file:  

```json
{
  "name": "testing",
  "streams": [{
    "type": "file",
    "stream": "file",
    "path": "/path/to/testing.log",
    "level": "info"
  }, {
    "type": "stream",
    "src": true,
    "level": "trace",
    "stream": "process.stdout"
  }, {
    "type": "raw",
    "src": true,
    "level": "trace"
  }]
}
```
Create the logger passing in the string configuration read from the above file:

```javascript
var fh_logger = require("fh-logger");
var logger = fh_logger.createLogger(stringConfig);
```

### Testing
To run all the tests:

```shell
grunt mochaTest
```

#### Request Id logging
`fh-loggger` also exports express-compatible middleware to generate unique requestId and automatically include it in logging methods.

```
var fh_logger = require('fh-logger');

// must be called to setup the middleware
var logger = fh_logger.createLogger({
  name: 'first',
  requestIdHeader: 'X-SOME-HTTP-HEADER'
});
app.use(logger.requestIdMiddleware);
app.get('/', function(req, res) {
  console.log(req.requestId); // uuid
  console.log(logger.requestId); // uuid
  logger.info('some message'); // -> {msg: 'some message', requestId: 'some-uuid'}
  logger.info(logger.requestIdHeader) // -> {msg: 'X-SOME-HTTP-HEADER', requestId: 'some-uuid'}
})
```

By default it utilizes the 'X-FH-REQUEST-ID' header, this can be overridden by the configuration passed to `createLogger` as shown above

##### ensureRequestId

For logging inside callbacks that are supposed to display the `requestId` but for some reason do not, utilize the exported `ensureRequestId({Function})`:

```
logger.ensureRequestId(function asyncOperation(err, data){
  logger.error(err); // -> {req.reqId: 'some-uuid'}
});
```

For more information refer to the [continuation-local-storage module docs](https://github.com/othiym23/node-continuation-local-storage#namespacebindcallback-context)

---
_Source: https://npm.io/package/fh-logger · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
