# kleio

> Simplifies logging during development and production phases

Latest version **1.0.0** (published 2016-11-17) · MIT license · 0 weekly downloads

## Install

```sh
npm install kleio
pnpm add kleio
yarn add kleio
bun add kleio
```

## 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 | 2016-11-17 |
| First published | 2016-06-05 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 2 |
| Author | Joel Roxell |
| Maintainers | joelroxell |

## Links

- npm: https://www.npmjs.com/package/kleio
- Repository: https://github.com/JoelRoxell/kleio
- Issues: https://github.com/JoelRoxell/kleio/issues
- npm.io page: https://npm.io/package/kleio

## Dependencies (1)

- [ramda](https://npm.io/package/ramda.md) ^0.22.1

## Recent versions

- 1.0.0 (latest) — 2016-11-17
- 0.3.8 — 2016-08-24
- 0.3.7 — 2016-06-17
- 0.3.6 — 2016-06-17
- 0.3.5 — 2016-06-15
- 0.3.4 — 2016-06-11
- 0.3.3 — 2016-06-10
- 0.3.2 — 2016-06-10
- 0.3.1 — 2016-06-09
- 0.3.0 — 2016-06-08
- 0.2.2 — 2016-06-07
- 0.2.1 — 2016-06-06
- 0.1.1 — 2016-06-05

## README

## kleio [![Build Status](https://travis-ci.org/JoelRoxell/Kleio.svg?branch=master)](https://travis-ci.org/JoelRoxell/Kleio)

Functional logger which purpose is to simplify debugging and error management during production and development phases. In essence kleio provides the common error-level/severity system based on `npm` logging levels. Kleio provides a simple and minimal API in order to send debugging information to a remote host with ease.

## Installation
`npm install kleio --save`

## Usage
> Note: The logger is invoked when last parameter has be acquired.

### Create a reusable functional logger
```javascript
let log = kleio(/* environment */)(/* post implementation */);

log(/* message */)(/* severity */)(/* meta-data */);
// Or
log(/* message */, /* severity */, /* meta-data */);
```

### Log object
Passed to the `post` function parameter.
```javascript
Log {
  time: String,
  message: String,
  severity: Number,
  meta: Object
}
```

### Log levels
Levels are defined using integer values 0(high) to 6(low).
```javascript
{
  ERROR: 0,
  WARN: 1,
  INFO: 2,
  VERBOSE: 3,
  DEBUG: 4,
  SILLY: 5,
  SILENT: 6
}
```

### A simple use case
```javascript
import kleio, { LEVELS } from 'kleio';

const postFunction = function(log) {
  fetch('/log', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(log)
  });
}

let log = kleio(process.env.NODE_ENV)(postFunction);

log(LEVELS.ERROR)('Hello log!')({
  'some': 'additional data that might be valuable.'
});

log(LEVELS.DEBUG)('A test log')();

log(LEVELS.ERROR)('Perform something after post')()
  .then(res => { /* ... */ });
  .catch(err => { /* ... */ });
```

### A more advanced use case
```javascript
// services/log.js
import kleio, { LEVELS } from 'kleio';

const env = process.env.NODE_ENV || 'development';

const developmentLogger = kleio(env)(function(log) {
  return fetch('/log/to/development/server', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(log)
  }).then(checkStatus);
});
const productionLogger = kleio(env)(function(log) {
  return fetch('/log/to/production/server', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(log)
  }).then(checkStatus);
});

function checkStatus(response) {
  if (response.status >= 200 && response.status < 300) {
    return response;
  } else {
    return Promise.reject(response);
  }
}

export const error = productionLogger(LEVELS.ERROR);
export const warn = productionLogger(LEVELS.WARN);
export const log = developmentLogger(LEVELS.SILLY);
export const info = developmentLogger(LEVELS.INFO);
export const debug = developmentLogger(LEVELS.DEBUG);
export const verbose = developmentLogger(LEVELS.VERBOSE);

// antoher-file.js
import { log, error, info, debug, verbose } from 'services/log';

log('A silly log', 1339);

error('Error message', { /* ... */ }).then(function(res) {
    /* ... */
  })
  .catch(function(e) {
    /* ... */
  });

info('Info message', 123);

debug('Debug message', {
  x: 10
});

verbose('Verbose', [
  {
    x: 10
  },
  {
    x: 20
  }
]);
```

#### Post directly
```javascript
import kleio from 'kleio';

kleio(
  /* post implementation */,
  /* environment */,
  /* message */,
  /* severity */,
  /* meta-data */
).then(res => { /* ... */}).catch(err => { /* ... */});

// or

kleio(/* post implementation */)
  (/* environment */)
  (/* message */)
  (/* severity */)
  (/* meta-data */)
  .then(res => { /* ... */})
  .catch(err => { /* ... */});
```

## Tests
`npm test`


## License
MIT

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