# rootle

> TS implementation of Rootle structured log

Latest version **0.6.0** (published 2022-10-26) · ISC license · 0 weekly downloads

## Install

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

## Health

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

Positive: has types; no vulnerabilities.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.6.0 |
| Published | 2022-10-26 |
| First published | 2022-08-15 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 18.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | mhd999 |

## Links

- npm: https://www.npmjs.com/package/rootle
- npm.io page: https://npm.io/package/rootle

## Recent versions

- 0.6.0 (latest) — 2022-10-26
- 0.5.0 — 2022-10-24
- 0.4.0 — 2022-08-26
- 0.3.0 — 2022-08-19
- 0.2.0 — 2022-08-19
- 0.1.0 — 2022-08-17
- 0.0.3 — 2022-08-15
- 0.0.2 — 2022-08-15
- 0.0.1 — 2022-08-15

## README

# Rootle

Cross language structured log library.

## Methods

| Name          | Parameters |
| ------------- | ------------- |
| Info          |(message)  |
| Warn         | (message)  |
| Error         | (message, downstream, stacktrace, code)  |

## Transports

File transport, allows writting logs to file

```
const logger = new Rootle("ac12Cd-Aevd-12Grx-235f4", "billing-Lambda", undefined, new FileTransport({
    enable: true,
    filename: "logs",
    path: __dirname
}));
```

## Log structure

| Field         | Type          | Required
| ------------- | ------------- | ------------- |
| id            | string        |Yes            |
| application   | string        |Yes            |
| timestamp     | Timestamp     |Yes            |
| message       | string        |Yes            |
| level         | string        |Yes            |
| event         | string        |No             |
| downstream    | Downstream    |No             |
| stacktrace    | string        |No             |
| code "exit code"  | int       |No             |

###  Downstream structure

| Field         | Type          | Required
| ------------- | ------------- | ------------- |
| http          | Http          |No             |
| grpc          | Grpc          |No             |

####  Http structure

| Field         | Type          | Required
| ------------- | ------------- | ------------- |
| method        | string        |No             |
| statusCode    | HttpStatusCode(enum) |No      |
| url           | string        |No             |
| useragent     | string        |No             |
| referer       | string        |No             |
| payload       | string        |No             |

####  Grpc structure

| Field         | Type          | Required
| ------------- | ------------- | ------------- |
| procedure     | string        |No             |
| code          | GrpcCodes(enum) |No           |
| service       | string        |No             |
| useragent     | string        |No             |
| referer       | string        |No             |
| payload       | string        |No             |


## Install and usage

- install
```
npm i rootle
```

- usage
```
const logger = new Rootle("ac12Cd-Aevd-12Grx-235f4", "billing-Lambda");

logger.info("Info, hello world!");
logger.warn("Warn, hello world!");

var json = {
    "foo": "bar"
};

logger.error("Error, hello world!", JSON.stringify(json), {
    http: {
        method: "GET",
        statusCode: HttpStatusCode.INTERNAL_SERVER_ERROR,
        url: "http://localhost:8080/invoice/123",
        useragent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
        referer: "http://localhost:8080/",
        payload: JSON.stringify(json)
    },
    grpc: {
        procedure: "GetInvoice",
        code:      GrpcCodes.INTERNAL,
        service:   "invoice",
        useragent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
        referer:   "http://localhost:8080/",
        payload: JSON.stringify(json)
    }
}, "billing/user", 0);
```

## Output example
```
- Info: {"id":"ac12Cd-Aevd-12Grx-235f4","application":"invoice-lambda","timestamp":1660741987,"message":"Hello World","level":"INFO"}

- Warn: {"id":"ac12Cd-Aevd-12Grx-235f4","application":"invoice-lambda","timestamp":1660741987,"message":"Hello World","level":"WARN"}

- Error: 
{
   "id":"ac12Cd-Aevd-12Grx-235f4",
   "application":"invoice-lambda",
   "timestamp":1660910613,
   "message":"Hello World",
   "level":"ERROR",
   "event":"{\"foo\":\"bar\"}",
   "downstream":{
      "grpc":{
         "procedure":"GetInvoice",
         "code":13,
         "service":"invoice",
         "useragent":"\t/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
         "referer":"http://localhost:8080/",
         "payload":"{\"foo\":\"bar\"}"
      },
      "http":{
         "method":"GET",
         "status_code":500,
         "url":"http://localhost:8080/invoice/123",
         "useragent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
         "referer":"http://localhost:8080/",
         "payload":"{\"foo\":\"bar\"}"
      }
   },
   "stackTrace":"billing/user",
   "code":0
}
```

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