Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ibitcy/eo-logger
Isomorphic JavaScript logger based on Elastic Common Schema
https://github.com/ibitcy/eo-logger
ecs elastic-common-schema elasticsearch logger
Last synced: 3 months ago
JSON representation
Isomorphic JavaScript logger based on Elastic Common Schema
- Host: GitHub
- URL: https://github.com/ibitcy/eo-logger
- Owner: ibitcy
- License: mit
- Created: 2020-04-27T10:32:29.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-07-12T02:35:16.000Z (over 1 year ago)
- Last Synced: 2024-10-05T23:31:46.979Z (3 months ago)
- Topics: ecs, elastic-common-schema, elasticsearch, logger
- Language: TypeScript
- Homepage:
- Size: 1.36 MB
- Stars: 21
- Watchers: 4
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
eo-logger
Isomorphic logger based on Elastic Common Schema## ✨ Features:
- Tiny <1KB size gzip
- Works in Node.js and in Browser
- Built-in Typescript support
- Google Web Vitals and Elastic Common Schema under the hood## How to install
```bash
yarn add eo-logger
```Or
```bash
npm install eo-logger --save
```## How to use in browser
For start using required to create instance of class `Logger`
```ts
import { Logger } from 'eo-logger/dist/client/logger';export const logger = new Logger();
```Now you can import logger in any place of your application and use one of next methods
`logger.error` - for errors
`logger.debug` - for debug some information
`logger.warning` - for warnings
`logger.collectMetrics` - for collect performance metrics of your web application (this method available only for client logger)
By default logger transport just display `ECS.Message` in console.
If you want to collect logs, you have to implement your own `Transport` class.
Actually it is quite simple, look at example below:```ts
import { ECS, Transport } from 'eo-logger';
import { Logger } from 'eo-logger/dist/client/logger';class MyTransport extends Transport {
public send(message: ECS.Message): void {
fetch('/frontend-logs', {
method: 'post',
body: JSON.stringify(message),
});
}
}export const logger = new Logger({
transport: new MyTransport(),
});
```## How to use with express
1. Create api endpoint for collect logs
```ts
import * as express from 'express';const app = express();
app.use(express.json());app.post('/frontend-logs', (req, res) => {
return res.status(200).send();
});
```2. Add `@elastic/elasticsearch`
```bash
yarn add @elastic/elasticsearch
```3. Create elasticsearch client and transport instance
```ts
import * as express from 'express';
import { Client } from '@elastic/elasticsearch';
import { Transport as ElkTransport } from 'eo-logger/dist/server/logger';const app = express();
app.use(express.json());app.post('/frontend-logs', (req, res) => {
elkTransport.send(req.body);return res.status(200).send();
});const elasticClient = new Client({ node: 'http://localhost:9200' });
const elkTransport = new ElkTransport({
client: elasticClient,
indexBase: 'frontend-logs',
maxQueueSize: 5,
});
```## Advanced
Logger contains 3 main components:
* Context
* Transport
* Formatter## Client utilities
`getPerformanceMetrics` - function returns object with performance metrics of page speed loading
## Server utilities
`parseUserAgent` - function returns `ECS.UserAgent` object with information based on `user-agent` string
`parseGeo` - function return `ECS.Geo` object with information based on ip string