🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

@rocicorp/logger

Package Overview
Dependencies
Maintainers
7
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@rocicorp/logger

Logging utilities

5.4.0
latest
Source
npm
Version published
Weekly downloads
25K
8.87%
Maintainers
7
Weekly downloads
 
Created
Source

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

FAQs

Package last updated on 17 Apr 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts