1.0.1 • Published 1 year ago

@vouchfor/libs v1.0.1

Weekly downloads
-
License
UNLICENSED
Repository
github
Last release
1 year ago

Share libs

included modules

  • dotenv
  • @logtail/node
  • @logtail/winston
  • @sentry/node
  • @sentry/tracing
  • winston

Installation

// will need to publish this module to npm registry with private account
npm i @vouchfor/libs

// or directly from private repo

npm i git+ssh://git@github.com:VouchAU/vouch-libs.git

ENV variables

ENV=dev|staging|prod
LOGTAIL_SOURCE_TOKE=xxxxxx
SENTRY_DSN=xxxxxxx

Logger

Logger class is constructed using winston and logtail as the transport layer. To channel the logs to Logtail, it requires LOGTAIL_SOURCE_TOKEN in the .env file, or register the token to the config module:

import { Logger } from '@vouchfor/libs';

const logger = new Logger();

logger.info('Hi');
// --> [INFO] Hi

get winstan logger instance directly

import { getLogger } from '@vouchfor/libs';

const logger = getLogger();

logger.info('Hi');
// --> [INFO] Hi

getLogger support winston transformer and format method passing through the config options

const logger = getLogger({
  transformer: (info) => ({...info, foo: process.env.BAR}),
  format: (info) => `[LOGGER] ${JSON.stringiy(info)}`
});

logger.info('Hi');
// --> [LOGGER] {"message": "Hi", "foo": "bar", ... }

Injecting metadata per process/request.

import { Logger } from '@vouchfor/libs';

const logger = new Logger({
  metadata: {
    requestId: "1234-123-123-1234",
  }
});

logger.info('Hi'); 
// --> [INFO] Hi {"metadata":{"requestId":"1234-123-123-1234"}}

Logtail source_token can be injected through the class initialisation.

import { Logger } from '@vouchfor/libs';

const logger = new Logger({
  token: 'xxxxxxx',
  metadata: {
    requestId: "1234-123-123-1234",
  }
});

logger.info('Hi');
// --> [INFO] Hi {"metadata":{"requestId":"1234-123-123-1234"}}

Sentry

Sentry DSN is needed in .env file as in .env.

import { Sentry } from '@vouchfor/libs';

try {
  throw new Error('123');
} catch (err) {
  Sentry.captureException(err);
}

To use Sentry in lambda, it requires @sentry/serverless

import { Sentry } from '@vouchfor/libs';
import { AWSLambda } from '@sentry/serverless';

exports.handler = AWSLambda.wrapHandler(async (event, context) => {
  throw new Error('oh, hello there!');
});

// or just use the `@sentry/serverless` module

import * as Sentry from '@sentry/serverless';

Sentry.init({
  ...
})

exports.handler = Sentry.AWSLambda.wrapHandler(async (event, context) => {
  throw new Error('oh, hello there!');
});