Pluggable and universal log output library for any server/browser execution environment.
npm install @fastkit/universal-logger// 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 (!import.meta.env.SSR) {
  transports.push(
    ConsoleTransport({
      level: import.meta.env.DEV ? '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: import.meta.env.APP_STAGE === 'dev',
    }),
  );
}
export const { getLogger, getNamedSettings, Logger } = loggerBuilder({
  defaultSettings: {
    level: import.meta.env.DEV ? 'debug' : 'trace',
    transports,
  },
});ts// some-file.ts
import { getLogger } from './logger';
const logger = getLogger('some-file');
logger.info('Hello world!!!', { hoge: 1, fuga: '2', piyo: { puyo: true } });ts