@rocicorp/logger
TypeScript icon, indicating that this package has built-in type declarations

5.2.1 • Public • Published

logger

Provides a simple logging interface as well as a LogContext class which carries a context around.

Installation

npm install @rocicorp/logger

Usage

LogContext

LogContext includes a context that gets included in the log message.

import {LogContext} from '@rocicorp/logger';

const lc = new LogContext('info');
lc.info('hello'); // prints "hello"

const lc2 = new LogContext('info', {name: 'alice'});
lc.info('hello'); // prints "name=alice hello"

const lc3 = lc2.withContext('bbb');
lc3.info('hello'); // prints "name=alice bbb hello"

const lc4 = lc3.withContext('ccc');
lc4.info('hello'); // prints "name=alice bbb ccc hello"

const lc5 = lc4.withContext('ddd', 'eee');
lc5.info('hello'); // prints "name=alice bbb ccc ddd=eee hello"

// Or get a context logger appropriate for the Node environment.
const nlc = newNodeLogContext('debug');
nlc.info('fff'); // prints "INF fff"

OptionalLogger

interface OptionalLogger { ... }

This interface is used to provide conditional logging. It is intended to be used with conditional method calling ?.().

import {ConsoleLogger, type OptionalLogger} from '@rocicorp/logger';

const l: OptionalLogger = new ConsoleLogger('info');
l.info?.('hello'); // prints "hello"
l.debug?.('hello'); // does not print anything

But more importantly it does not evaluate the arguments.

import {ConsoleLogger, type OptionalLogger} from '@rocicorp/logger';
const alwaysThrows = () => {
  throw new Error();
};
const l: OptionalLogger = new ConsoleLogger('info');
l.debug?.(alwaysThrows()); // does not print anything, but does not throw

Implementing Your Own LogSink

There is also the LogSink interface which is very minimal. Its intended use is for custom log implementations.

class ExampleLogSink implements LogSink {
  log(level: LogLevel, ...args: unknown[]): void {
    //...
  }
}

You can get an OptionalLogger from a LogSink using OptionalLoggerImpl.

import {
  OptionalLoggerImpl,
  type LogSink,
  type OptionalLogger,
} from '@rocicorp/logger';

const logSink: LogSink = new ExampleLogSink();
const l: OptionalLogger = new OptionalLoggerImpl(logSink);

Readme

Keywords

none

Package Sidebar

Install

npm i @rocicorp/logger

Weekly Downloads

8,708

Version

5.2.1

License

Apache-2.0

Unpacked Size

22.7 kB

Total Files

5

Last publish

Collaborators

  • alexhking
  • darick
  • cesaraz1
  • grgbkr
  • aboodman
  • arv