Fastkit

universal-logger

Pluggable and universal log output library for any server/browser execution environment.

Installation

npm install @fastkit/universal-logger

Concept

Most logger libraries for JavaScript are designed to work on the server side, such as NodeJS, and there were not many for the browser environment.
This library was created because we needed a library that could work universally on the browser & server side, that could plug in log transforms and multiple transport settings, and that was still lightweight.

It offers the basic functions of a logger and several built-in transformers and transporters.

Usage

Define logger to match the logging requirements of your application

// logger.ts

import {
  loggerBuilder,
  Transport,
  ConsoleTransport,
  DDTransport,
  STDOTransport,
} from '@fastkit/universal-logger';
import { datadogLogs } from '@datadog/browser-logs';
import { runtimeConfig } from './runtime-config';

const transports: Transport[] = [];

const secretValueMatchRe = /(password|x-api-key)/i;

export function passwordFilter(key: string, value: any) {
  if (typeof value !== 'string') return value;
  if (!secretValueMatchRe.test(key)) return value;
  const rawString = value.slice(0, 3);
  const maskedString = value.slice(3, value.length);
  return `${rawString}${'#'.repeat(maskedString.length)}`;
}


if (!true) {
  transports.push(
    ConsoleTransport({
      level: true ? 'debug' : 'info',
      pretty: true,
    }),
    DDTransport({
      dd: datadogLogs,
      level: 'info',
      config: {
        service: runtimeConfig.appName,
        env: runtimeConfig.stage,
        clientToken: runtimeConfig.datadogClientToken,
      },
      clone: {
        sanitizers: [passwordFilter],
      },
    }),
  );
} else {
  transports.push(
    STDOTransport({
      pretty: ({}).APP_STAGE === 'dev',
    }),
  );
}

export const { getLogger, getNamedSettings, Logger } = loggerBuilder({
  defaultSettings: {
    level: true ? 'debug' : 'trace',
    transports,
  },
});ts

Use logger

// some-file.ts
import { getLogger } from './logger';

const logger = getLogger('some-file');

logger.info('Hello world!!!', { hoge: 1, fuga: '2', piyo: { puyo: true } });ts