TypeScript Abstract Logger
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";
class Calculator {
public constructor(private readonly log: Logger = dummyLogger) {}
public sum(a: number, b: number) {
const result = a + b;
this.log.info(`summing ${a} + ${b} = ${result}`, a, b, result);
return result;
}
}
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`);
}
}
const calculator1 = new Calculator();
const calculator2 = new Calculator(console);
const calculator3 = new Calculator(new FileLogger("log.txt"));
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)