# @spot-meetings/backend-logger

Simple console logger based on [Winston](https://github.com/winstonjs/winston).

## Installation

```sh
npm i @spot-meetings/backend-logger
```

## Usage

### Environments

The environment will be taken from either the `RUNTIME_ENV` or `NODE_ENV` env variables, in that order. This allows you to have different build and running environments.

### Log Level

Service should run with `LOG_LEVEL` environment variable set:

`$ LOG_LEVEL=info node index.js`

Then, the logger will log anything that has lower priority than the `LOG_LEVEL` env variable:

Read more about [Winston's log levels](https://github.com/winstonjs/winston#using-logging-levels) to know what will be logged depending on your `LOG_LEVEL` env variable.

As this module is just a pre-configured instance of Winston, please refer to their [usage documentation](https://github.com/winstonjs/winston#usage) for more details.

### Log Output

To set different output types, set the `LOG_OUTPUT` env var to any of the following:

- `summary`: Just the log message with a timestamp and a label.
- `details`: The above plus detailed information about the log message in JSON format, pretty printed.
- `raw`: The raw, inline JSON message.

### Example

`./some/module.ts`:

```ts
import { createLogger } from '@spot-meetings/backend-logger'

const logger = createLogger('my-service', '127.0.0.1', '1.0.1')

logger.debug('This is not necessary on production.', { hello: 'world' }) // Will not log
logger.info('This is very informational.')
logger.warn('Beware! You\'re about to do a thing.')
logger.error('IT FAILED!')
logger.error('IT FAILED! SEE DETAILS:', {
  extra: 'Yeah, it was bad...',
  error // error object. will log stack as well into stack log property
})
```

#### Sample Debug Log

```json
{
   "level":"warn",
   "message":"Consequatur ratione quas laudantium consequatur libero numquam molestiae autem vero.",
   "environment":"test",
   "type":"log",
   "reporter":{
      "version":"3.3.6",
      "id":"Intelligent Metal Soap",
      "ip":"104.145.61.188"
   },
   "timestamp":"2021-08-19T15:13:23.773Z"
}
```

#### Sample Error Log

```json
{
   "level":"error",
   "message":"Reprehenderit dolorem recusandae consequatur.",
   "error":{

   },
   "stack":"Error: Reprehenderit dolorem recusandae consequatur.\\n    at Context.<anonymous> (/home/my-service/test/src/index.spec.ts:183:14)\\n    at callFn (/home/my-service/node_modules/mocha/lib/runnable.js:366:21)\\n    at Test.Runnable.run (/home/my-service/node_modules/mocha/lib/runnable.js:354:5)\\n    at Runner.runTest (/home/my-service/node_modules/mocha/lib/runner.js:680:10)\\n    at /home/my-service/node_modules/mocha/lib/runner.js:803:12\\n    at next (/home/my-service/node_modules/mocha/lib/runner.js:595:14)\\n    at /home/my-service/node_modules/mocha/lib/runner.js:605:7\\n    at next (/home/my-service/node_modules/mocha/lib/runner.js:488:14)\\n    at Immediate._onImmediate (/home/my-service/node_modules/mocha/lib/runner.js:573:5)\\n    at processImmediate (internal/timers.js:464:21)",
   "environment":"test",
   "type":"log",
   "reporter":{
      "version":"2.3.5",
      "id":"Tasty Concrete Towels",
      "ip":"240.132.132.180"
   },
   "timestamp":"2021-08-19T15:13:23.776Z"
}
```

## API Docs

Please visit [the documentation page](https://SpotMeetings.github.io/backend-logger/) for more information. -->
