@ovotech/winston-logger
TypeScript icon, indicating that this package has built-in type declarations

1.2.6 • Public • Published

Winston logger

Wrap winston logger to hide graylog semantics and implement safe static meta contexts.

Using

yarn add @ovotech/winston-logger
import { Logger } from '@ovotech/winston-logger';
import * as winston from 'winston';

const winstonLogger = winston.createLogger(...);

const myRequestProcessor = (req: Request) =>{
  const logger = new Logger(winstonLogger, { traceToken: req.headers['X-Trace-Token'] });

  logger.info('test');
}

All the normal winston logger methods are implemented, alongside their "log('level', ...)" counterparts.

logger.silly('test-message', { other: 'stuff' });
logger.log('silly', 'test-message', { other: 'stuff' });

logger.notice('test-message', { other: 'stuff' });
logger.log('notice', 'test-message', { other: 'stuff' });

logger.info('test-message', { other: 'stuff' });
logger.log('info', 'test-message', { other: 'stuff' });

logger.warn('test-message', { other: 'stuff' });
logger.log('warn', 'test-message', { other: 'stuff' });

logger.error('test-message', { other: 'stuff' });
logger.log('error', 'test-message', { other: 'stuff' });

Adding static meta

You can add more static meta after the class has been instantiated. This however results in a new Logger with the additional (merged) static meta, and the old object is unaffected.

import { Logger } from '@ovotech/winston-logger';
import * as winston from 'winston';

const winstonLogger = winston.createLogger(...);

const logger = new Logger(winstonLogger, { uri: '/some-url' });
const extendedLogger = logger.withStaticMeta({ additional: 'test' });

Sanitizers

You can add functions that modify the metadata just before the log is sent. This is use to redact sensitive info from the log.

import { Logger, LoggerSanitizer } from '@ovotech/winston-logger';
import * as winston from 'winston';

const winstonLogger = winston.createLogger(...);

const sanitize: LoggerSanitizer = (meta) => {
  const { email, ...rest } = meta;
  return rest;
}

const logger = new Logger(winstonLogger, {}, [sanitize]);
logger.info("User logged in", { email: 'user@example.com' });

You can add additional sanitizers later on with the withSanitizers method, it will not modify the logger instance, but create a new one, with the additional sanitizers.

Running the tests

Then you can run the tests with:

yarn test

Coding style (linting, etc) tests

Style is maintained with prettier and tslint

yarn lint

Deployment

Deployment is preferment by lerna automatically on merge / push to master, but you'll need to bump the package version numbers yourself. Only updated packages with newer versions will be pushed to the npm registry.

Contributing

Have a bug? File an issue with a simple example that reproduces this so we can take a look & confirm.

Want to make a change? Submit a PR, explain why it's useful, and make sure you've updated the docs (this file) and the tests (see test folder).

License

This project is licensed under Apache 2 - see the LICENSE file for details

/@ovotech/winston-logger/

    Package Sidebar

    Install

    npm i @ovotech/winston-logger

    Weekly Downloads

    91

    Version

    1.2.6

    License

    Apache-2.0

    Unpacked Size

    14.4 kB

    Total Files

    10

    Last publish

    Collaborators

    • ovox
    • oep-accounts-bot
    • ovo.backstage.admins
    • bookings-team
    • orion-bot
    • bizval-bot
    • oeptariffs
    • props
    • metering-reads-health-bot
    • ovotech-identity
    • paceteamkaluza
    • trading-and-dispatch
    • retail-payg-tech
    • accrecovo
    • ovo.trading.tech
    • qe-team
    • ovotech-smart-thermostat
    • rise-team
    • engagement-insights
    • myovo-self-serve-service-account
    • mars-rover
    • ape-team
    • kaluza-devex
    • ohs-aurora
    • kaluza-rnr
    • ipa-bot
    • kawbot
    • data.discovery.ovo
    • ovotech-sg
    • ovotech-qs
    • ovoenergyapps
    • homemoves
    • ovo-oot-bot
    • cp-ui-tooling
    • ovo-bit-tech
    • sir_hiss