Skip to content

eajr/elylog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@eajr/elylog

A plugin for Elysia.js that handles basic stdout logging.

Installation

bun add @eajr/elylog

Testing

bun test

Tests run in GitHub Actions on every pull request and on pushes to main via .github/workflows/test.yml.

Usage

import { Elysia } from "elysia";
import { elylog, LogType } from "@eajr/elylog";

const app = new Elysia()
  .use(elylog())
  .get("/", (ctx) => {
    ctx.log(LogType.INFO, { message: "There was an error" });
    ctx.log(LogType.ERROR, { message: "Here's some info" });
    ctx.log(LogType.WARNING, { message: "Beware!" });
    return "Hello World";
  })
  .listen(8080);

console.log(`Listening on http://${app.server!.hostname}:${app.server!.port}`);

Example output

{"timestamp":"2024-03-19T20:53:27.453Z","type":"SYS","uuid":"1967b8c9-588b-4d43-933d-1658c453efc6","method":"GET","path":"/info"}
{"timestamp":"2024-03-19T20:53:27.453Z","type":"INFO","uuid":"1967b8c9-588b-4d43-933d-1658c453efc6","data": { "message":"info test"}}
{"timestamp":"2024-03-19T20:53:27.454Z","type":"META","uuid":"1967b8c9-588b-4d43-933d-1658c453efc6","duration":6}

Custom options

export interface IOptions {
  // Elylog generates a request ID (uuidv4) by default on request.
  // Set this to a header to use request id's generated by client
  // Default: null
  headerForRequestId?: string;

  // Log all requests (SYS log type): true (default)
  logRequests?: boolean;

  // Log metadata at the end of life cycle (META log type): true (default)
  // Metadata:
  //   - Duration (in ms)
  logMetaData?: boolean;

  // Custom print function for request logs (SYS log type): JSON (default)
  requestPrintFn?(log: LogRequest): void;

  // Custom print function for log messages (INFO|WARNING|ERROR): JSON (default)
  logPrintFn?(log: LogMessage): void;

  // Custom print function for metadata messages (META): JSON (default)
  metadataPrintFn?(log: LogMetaData): void;
}

Additional notes

For some reason the Elysia-Swagger plugin breaks if you instantiate elylog before the swagger plugin. It also breaks for other logging plugins, so make sure to .use(elylog()) after you use the swagger plugin.

Elylog supports both onAfterResponse and onResponse lifecycle hooks to stay compatible across Elysia versions and adapters (including the Node adapter).

Changelog

v1.0.0

  • Changed text logging (via context logger) to object logging
  • Added multi-file elysia example api in /examples/multifile

License

MIT

About

A plugin for Elysia.js that handles basic stdout logging.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors