Skip to content

rashedInt32/effect-logger-pretty

Repository files navigation

effect-logger-pretty

npm downloads license

Zero-dependency, ridiculously pretty console logger for Effect-TS.

Beautiful, colorful, one-line logs in development → completely silent in production.

Before vs After

Default Effect Logger

Default Effect Logger

With effect-logger-pretty

With Pretty Logger

Install

npm i effect-logger-pretty
# or
pnpm add effect-logger-pretty
# or
yarn add effect-logger-pretty

Usage — 3 lines and you're done

Create example.ts:

import { Effect, Schedule } from "effect";
import { withPrettyLogger } from "effect-logger-pretty";

const program = Effect.log("Hello from effect-logger-pretty!")
  .pipe(Effect.delay("2 seconds"))
  .pipe(Effect.repeat(Schedule.spaced("500 millis").pipe(Schedule.recurs(8))));

await Effect.runPromise(program.pipe(withPrettyLogger));

Run it:

npx tsx example.ts

Output (with real colors in your terminal):

15:44:23 INFO  Hello from effect-logger-pretty!  2.01s
15:44:24 INFO  Hello from effect-logger-pretty!  501ms
15:44:25 INFO  Hello from effect-logger-pretty!  501ms
15:44:25 INFO  Hello from effect-logger-pretty!  501ms
...

Advanced: Use as a Layer (recommended for real apps)

import { Effect, Layer } from "effect";
import { PrettyLoggerLayer } from "effect-logger-pretty";

const program = Effect.log("Running with Layer!").pipe(
  Effect.annotateLogs({ userId: "42", feature: "onboarding" }),
);

await Effect.runPromise(program.pipe(Effect.provide(PrettyLoggerLayer)));

Result:

16:01:12 INFO  Running with Layer!  userId="42" feature="onboarding"

Features

  • Full terminal colors (via tiny picocolors)
  • Smart duration formatting (ms → s when >1s)
  • Beautiful error stacks, strings, annotations, Uint8Arrays, etc.
  • Local time (not UTC)
  • One clean line per log — super easy to scan
  • Automatically disabled in production (process.env.NODE_ENV === "production")
  • < 100 lines total, zero runtime deps besides Effect

API

import {
  withPrettyLogger,
  prettyLogger,
  PrettyLoggerLayer,
} from "effect-logger-pretty";

// Quick pipeable way
program.pipe(withPrettyLogger);

// Or classic provide
Effect.provide(program, PrettyLoggerLayer);

// Or replace globally
Logger.replace(Logger.defaultLogger, prettyLogger);

License

MIT © 2025

About

Pretty console logger for Effect-TS with zero dependencies. Colorful dev logs, silent in prod.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published