https://github.com/joelalejandro/logepi
A tiny (Togepi-sized) package for logs, built on top of Winston.
https://github.com/joelalejandro/logepi
express-middleware koa-middleware logger logger-middleware logging pokemon winston
Last synced: about 1 month ago
JSON representation
A tiny (Togepi-sized) package for logs, built on top of Winston.
- Host: GitHub
- URL: https://github.com/joelalejandro/logepi
- Owner: joelalejandro
- License: mit
- Created: 2019-01-11T19:46:05.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-01-04T20:59:17.000Z (over 2 years ago)
- Last Synced: 2025-03-25T21:21:47.139Z (about 2 months ago)
- Topics: express-middleware, koa-middleware, logger, logger-middleware, logging, pokemon, winston
- Language: JavaScript
- Size: 1.54 MB
- Stars: 3
- Watchers: 0
- Forks: 0
- Open Issues: 15
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Logepi
A tiny, Togepi-sized, logging library for Node.js apps & APIs.
## How to install
### Using npm
```shell
$ npm install --save logepi
```### Using yarn
```shell
$ yarn install logepi
```## How to use
The library is comprised of two major components:
- A `Log` static class which creates an instance of a [Winston](https://github.com/winstonjs/winston) logger, exposing several methods to output messages with different loglevels.
- `Middleware` functions to add automatic logging of request/response flows for HTTP servers. Currently the library supports [Koa](https://koajs.com) and [Express](https://expressjs.com/).There's also a [TypeScript declaration](./index.d.ts) file available for TS-based apps.
### Using the `Log` API
#### Importing the library
```js
// commonjs style
const { Log } = require("logepi");// ES modules style
import { Log } from "logepi";
```#### Log an error
```js
Log.error("An error was found", { tags: { process: "foo" } });
```#### Log a warning
```js
Log.warning("Careful!", { tags: { process: "foo" } });
```#### Log at INFO level
```js
Log.info("Hopefully someone will read this.", { tags: { process: "foo" } });
```#### Log at VERBOSE level
```js
Log.verbose("Now I'm all blah-by.", { tags: { process: "foo" } });
```#### Log at DEBUG log
```js
Log.debug("I've said too much!", { tags: { process: "foo" } });
```### Setting up an output level
In order to filter what messages are printed to the console transport, you can use the `Log.setOutputLevel()` method:
```js
// Limit messages to "error" level.
Log.setOutputLevel("error");
```You can also use the `LogLevel` enum, with uppercased keys (`INFO`, `WARN`, `ERROR`, `VERBOSE`, `DEBUG`).
### Using the Koa middleware
#### Import the library
```js
// commonjs style
const { KoaLoggingMiddleware } = require("logepi");// ES modules style
import { KoaLoggingMiddleware } from "logepi";
```#### Inject it into your app
```js
app
.use(...)
// ...make sure it's the *last* middleware...
.use(KoaLoggingMiddleware());
```### Using the Express middleware
#### Import the library
```js
// commonjs style
const { ExpressLoggingMiddleware } = require("logepi");// ES modules style
import { ExpressLoggingMiddleware } from "logepi";
```#### Inject it into your app
```js
app
.use(...)
// ...make sure it's the *last* middleware...
.use(ExpressLoggingMiddleware());
```### Adding tags to logs
Logepi offers a way to inject tagged data in a logline, with the format `[key:value]`. When logging, use the `tags` key on the `data` argument of any of the Log API methods. There's an example right in the next section.
### Configuring logging middlewares
All middlewares expose the same configuration object:
```js
/**
* Allows to configure log levels for requests and responses.
*/
logLevels: {
/**
* Sets the log level for all incoming requests.
*/
request: "info",/**
* Sets the log level for all outgoing responses, according to their status code.
*/
response: {
status2xx: "info", // For 200-399 codes
status4xx: "warn", // For 400-499 codes
status5xx: "error" // For 500-599 codes
}
}
```## How does it look?
_**Note:** Logs are single-lined, but for clarity's sake, they're shown in multiple lines._
### Manual logging
```js
Log.info("API is now ready", { tags: { port } });
```outputs:
```
[timestamp:2019-01-11T21:04:41.915Z]
[level:info]
[message:API is now ready]
[port:9000]
```### Incoming request
```
[timestamp:2019-01-11T21:00:45.442Z]
[level:info]
[message:IncomingRequest]
[url:/api/apps]
[queryParams:undefined]
[body:{}]
[headers:{"host":"localhost:9000","connection":"keep-alive","upgrade-insecure-requests":"1","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8","accept-encoding":"gzip, deflate, br","accept-language":"es-ES,es;q=0.9,en;q=0.8,en-US;q=0.7"}]
```### Outgoing response
```
[timestamp:2019-01-11T21:00:45.446Z]
[level:info]
[message:OutgoingResponse]
[status:200]
[body:{"ok":true,"data":{"foo":true}}]
[headers:{"host":"localhost:9000","connection":"keep-alive","upgrade-insecure-requests":"1","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8","accept-encoding":"gzip, deflate, br","accept-language":"es-ES,es;q=0.9,en;q=0.8,en-US;q=0.7"}]
```## Issues
Feel free to report any [issues](https://github.com/joelalejandro/logepi/issues) and we'll figure out a way to make it work.
## Want to contribute?
That's great! Open an issue first and let's discuss what you want to add or, by all means, fork this project! :)
## License
This project is licensed under the [MIT License](./LICENSE).