2.2.7 • Published 7 months ago

ts-log v2.2.7

Weekly downloads
715,849
License
MIT
Repository
github
Last release
7 months ago

TypeScript Abstract Logger

Coverage Downloads Version License

Abstract logger TypeScript interface along with a dummy logger that does nothing.

Useful for libraries wanting to provide a pluggable logger that does nothing by default (or provide your own default such as bunyan).

  • Matches the built-in console that can be used directly.
  • Also matches bunyan.
  • Provides usage and custom logger example.
  • Written in TypeScript, no need for extra typings.
  • No dependencies, 24 LOC with comments, 100% test coverage.

Installation

This package is distributed via npm

npm install ts-log
yarn add ts-log

Example

import { dummyLogger, Logger } from "ts-log";
import * as fs from "fs";

// example class that uses the logger
class Calculator {
  // accept the logger in the constructor, defaulting to dummy logger that does nothing
  public constructor(private readonly log: Logger = dummyLogger) {}

  public sum(a: number, b: number) {
    const result = a + b;

    // call the logger
    this.log.info(`summing ${a} + ${b} = ${result}`, a, b, result);

    return result;
  }
}

// example custom logger that logs to a file
class FileLogger implements Logger {
  private readonly fd: number;

  public constructor(filename: string) {
    this.fd = fs.openSync(filename, "a");
  }

  public trace(message?: any, ...optionalParams: any[]): void {
    this.append("TRACE", `${message} ${JSON.stringify(optionalParams)}`);
  }

  public debug(message?: any, ...optionalParams: any[]): void {
    this.append("DEBUG", `${message} ${JSON.stringify(optionalParams)}`);
  }

  public info(message?: any, ...optionalParams: any[]): void {
    this.append("INFO ", `${message} ${JSON.stringify(optionalParams)}`);
  }

  public warn(message?: any, ...optionalParams: any[]): void {
    this.append("WARN ", `${message} ${JSON.stringify(optionalParams)}`);
  }

  public error(message?: any, ...optionalParams: any[]): void {
    this.append("ERROR", `${message} ${JSON.stringify(optionalParams)}`);
  }

  private append(type: string, message: string) {
    fs.writeSync(this.fd, `${new Date().toISOString()} ${type} ${message}\n`);
  }
}

// don't define a logger, defaults to dummy logger that does nothing
const calculator1 = new Calculator();

// use the built-in console as the logger
const calculator2 = new Calculator(console);

// use the custom file logger
const calculator3 = new Calculator(new FileLogger("log.txt"));

// run the calculator
calculator1.sum(2, 3);
calculator2.sum(-4, 1);
calculator3.sum(6, 3);

Commands

  • npm start to start the example application.
  • npm run build to build the production version.
  • npm run test to run tests.
  • npm run coverage to gather code coverage.
  • npm run lint to lint the codebase.
  • npm run prettier to run prettier.
  • npm run validate to run all pre-commit checks (prettier, build, lint, test)
gsc-typescript-sdk@toes/core@infinitebrahmanuniverse/nolb-ts-l@prodam/prodam-types@everything-registry/sub-chunk-2977@dennisrijsdijk/streamdeck-tstcp-reachabilityx-hd-wallet-api-crypto@perennial/price-service-clientjumiotriviality-loggertriviality-react@apexfusionfoundation/vector-sdk-core@asiz33/smartblok-vendure-plugin@algorandfoundation/xhd-wallet-api@aliver/pyth-common-js@biblioteksentralen/marc@biblioteksentralen/oai-pmh-client@cardano-sdk/dapp-connector@cardano-sdk/e2e@cardano-sdk/golden-test-generator@cardano-sdk/hardware-ledger@cardano-sdk/hardware-trezor@cardano-sdk/key-management@cardano-sdk/ogmios@cardano-sdk/projection@cardano-sdk/projection-typeorm@cardano-sdk/rabbitmq@cardano-sdk/tx-construction@cardano-sdk/util@cardano-sdk/util-dev@cardano-sdk/wallet@cardano-sdk/web-extension@cardano-graphql/util@cardano-sdk/blockfrost@cardano-sdk/cardano-services@cardano-sdk/cardano-services-client@cardano-sdk/cip30@cardano-sdk/core@cardano-sdk/crypto@cardano-graphql/api-cardano-db-hasura@cardano-graphql/cli@cardano-graphql/serverwebql-codegen-cli@guigus/impulse-sdk-js@fevo-tech/graphql-codegen-cli@graphql-codegen/cli@getchill.app/tsclient@leoscope/openapi-request-validator@libreworks/container@lenoxys/eufy-security-client@linx_impulse/impulse-sdk-js@linximpulse/impulse-sdk-js@medrunner/api-client@ngx-next/logger@metacodelabs/janus-videoroom-web-sdk@mchappell/wallet@mchappell/web-extension@mchappell/cip30@mchappell/golden-test-generator@keys-pub/chill@keys-pub/tsclient@homebridge-eufy-security/eufy-security-client@pythnetwork/price-service-client@pythnetwork/pyth-common-js@rweich/streamdeck-ts@rfnovo/eufy-security-client@rfnovo/iobroker.eusec@spectralblu/eufy-security-client@solidgrounds/logger@restfulhead/ajv-openapi-request-response-validator@rhyslbw/isomorphic-cardano-serialization-libopenapi-frameworkopenapi-request-coerceropenapi-request-validatoronebot-client-nextpiixpay-express-middlewaregraphql-codegen-coregraphql-codegen-cli-nuxtcardano-graphql-clieufy-security-client-forkhmd2v-fork-xhd-wallet-apiiobroker.eufy-securityiobroker.euseckonnectjs@teambuildr/openapi-framework@teambuildr/openapi-request-validator@triviality/logger@userfrosting/gulp-bundle-assets@userfrosting/ts-log-adapter-ava@userfrosting/ts-log-adapter-gulplog@userfrosting/vinyl-fs-vpath@tmcw/graphql-codegen-cli@tonyfromundefined/graphql-codegen-cliblockchain-express-middlewarebotika-socketbugfinder-commitpath-number-sonarqube-preprocessor-featureselectionbugfinder-commitpath-quantifier-sonarqubebugfinder-commitpath-quantifier-sonarqubepredecessorsbugfinder-featureextractor-none
2.2.7

7 months ago

2.2.6

7 months ago

2.2.5

3 years ago

2.2.4

4 years ago

2.2.0

5 years ago

2.2.3

5 years ago

2.1.4

6 years ago

2.1.3

7 years ago

2.1.2

7 years ago

2.1.1

7 years ago

2.1.0

7 years ago

2.0.0

7 years ago

1.2.1

7 years ago

1.2.0

7 years ago

1.1.1

7 years ago

1.1.0

7 years ago

1.0.0

7 years ago