5.2.1 • Published 8 months ago

@rocicorp/logger v5.2.1

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
8 months ago

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);
5.2.1

8 months ago

5.2.0

11 months ago

5.1.0

12 months ago

5.0.0

12 months ago

4.1.0

1 year ago

4.0.0

1 year ago

3.0.0

1 year ago

2.2.0

2 years ago

2.1.1

2 years ago

2.1.0

2 years ago

2.0.0

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.0.0

2 years ago