slf4ts-api
TypeScript icon, indicating that this package has built-in type declarations

1.4.0 • Public • Published

slf4ts-api

Simple Logging Facade for NodeJS

NPM Version License Dependencies Status

Inspired by the popular Java lib SLF4J

This project is used to abstract logging
to develop reusable libraries and not force the usage
of a certain logging framework.

It's meant to be used with nodejs.

LogLevel

  • TRACE (numeric value: 4)
  • DEBUG (numeric value: 3)
  • INFO (numeric value: 2)
  • WARN (numeric value: 1)
  • ERROR (numeric value: 0)

Logger Implementations

slf4ts doesn't work without a logging-framework binding.
Bindings exist for a couple of logging-frameworks:

Write a binding

A binding for a logging-framework needs to implement the LoggerBinding interface and
the actual logger interface LoggerImplementation.
Also a file named .slf4ts-binding needs to be present in the package folder (can be empty).

A node package for a binding should export a single function that is used during binding discovery.

Interfaces to implement:

import { LogLevel } from "slf4ts-api";
 
interface LoggerImplementation {
    log(...args: any[]): Promise<any>;
    getImplementation<T>(): T;
    setConfig<T>(config: T, group: string, name: string): void;
    setLogLevel(logLevel: LogLevel, group: string, name: string): void;
    setMetadata(metadata: any, group: string, name: string): void;
}
 
interface LoggerBinding {
    getLoggerImplementation(): LoggerImplementation;
    getVendor(): string;
    getVersion(): string;
}

Sample implementation in typescript (index.ts):

import { LoggerBindings } from "slf4ts-api";
 
export default function(bindings: LoggerBindings) {
    bindings.registerBinding({
        getLoggerImplementation: () => { ... },
        getVendor: () => "My Logger Binding Implementation",
        getVersion: () => "1.0.0"
    });
}
 

An example implementation can be found in the example-node-modules folder of this project.

Usage

import { LoggerConfiguration, LogLevel, LoggerFactory } from "slf4ts-api";
 
// gets the root logger (group "" and name "")
const ROOT_LOGGER = LoggerFactory.getLogger();
 
class X {
 
    // gets a logger with group "my-lib" and name "X"
    private static LOG = LoggerFactory.getLogger("my-lib", "X");
 
    public async something(value: any) {
        // log with debug level and some metadata
        X.LOG.debug(`a message with ${value}`, { additionalData: "Testvalue" });
 
        try {
            ...
        } catch(error: Error) {
            // logs an error without metadata
            X.LOG.error('Error!', error);
        }
    }
 
}
 
// sets the log level of all loggers
LoggerConfiguration.setLogLevel(LogLevel.INFO);
 
// sets the log level of all loggers within group "my-lib"
LoggerConfiguration.setLogLevel(LogLevel.WARN, "my-lib");
 
// sets the log level of the logger with group "my-lib" and name "X"
LoggerConfiguration.setLogLevel(LogLevel.ERROR, "my-lib", "X");
 
const config = {
    transports: [...],
    events: [...],
    postProcessor: () => { ... }
};
 
// sets the config of all loggers
LoggerConfiguration.setConfig(config);
 
// sets the config of all loggers within group "my-lib"
LoggerConfiguration.setConfig(config, "my-lib");
 
// sets the config of the logger with group "my-lib" and name "X"
LoggerConfiguration.setConfig(config, "my-lib", "X");

License

MIT

Readme

Keywords

Package Sidebar

Install

npm i slf4ts-api

Weekly Downloads

8

Version

1.4.0

License

MIT

Unpacked Size

93.9 kB

Total Files

21

Last publish

Collaborators

  • rstiller