Skip to content

Logger

BasaltLogger

BasaltLogger is a class that allows you to register logging strategies for your application and log messages.

Adding a logging strategy
import { BasaltLogger, ConsoleLoggerStrategy } from '@basalt-lab/basalt-logger';

const logger = new BasaltLogger();

logger.registerStrategy('console', new ConsoleLoggerStrategy());

logger.log('hello world');

node example.js[2023-11-21 00:00:00] LOG : hello world

Removing a specific logging strategy
import { BasaltLogger, ConsoleLoggerStrategy } from '@basalt-lab/basalt-logger';

const logger = new BasaltLogger();

logger.registerStrategy('console', new ConsoleLoggerStrategy());

logger.unregisterStrategy('console');

node example.js

Removing all logging strategies
import { BasaltLogger, ConsoleLoggerStrategy } from '@basalt-lab/basalt-logger';

const logger = new BasaltLogger();

logger.registerStrategy('console', new ConsoleLoggerStrategy());

logger.clearStrategies();

node example.js

Creating a logging strategy
import { appendFile } from 'fs/promises';
import { BasaltLogger, LoggerStrategy, LogLevels}  from '@basalt-lab/basalt-logger';

class FileLoggerStrategy implements LoggerStrategy {
        public log(level: LogLevels, date: Date, object: unknown): void {
        const prefixDate = `[${date.toISOString().replace(/T/, ' ').replace(/\..+/, '')}]`;
        const sanitizedObject: string = typeof object === 'string' ? object : JSON.stringify(object);
        const message = `${prefixDate} ${level} : ${sanitizedObject}`;
        await appendFile(this._path, `${message}\n`);
    }
}

const logger = new BasaltLogger();

logger.registerStrategy('file', new FileLoggerStrategy());
logger.log('Hello World');

node example.jscat test.log[2023-11-21 00:00:00] LOG : Hello World

Adding multiple logging strategies
import { BasaltLogger, ConsoleLoggerStrategy, FileLoggerStrategy}  from '@basalt-lab/basalt-logger';

const logger = new BasaltLogger();

logger.registerStrategies([
    ['console', new ConsoleLoggerStrategy()],
    ['file', new FileLoggerStrategy('log.txt')]
]);

logger.log('Hello World');

node example.js[2023-11-21 00:00:00] LOG : Hello Worldcat log.txt[2023-11-21 00:00:00] LOG : Hello World

All log levels
import { BasaltLogger, ConsoleLoggerStrategy }  from '@basalt-lab/basalt-logger';

const logger = new BasaltLogger();

logger.registerStrategy('console', new ConsoleLoggerStrategy());

logger.log('hello world');
logger.info('hello world');
logger.debug('hello world');
logger.warn('hello world');
logger.error('hello world');

node example.js[2023-11-21 00:00:00] LOG : hello world
[2023-11-21 00:00:00] INFO : hello world
[2023-11-21 00:00:00] DEBUG : hello world
[2023-11-21 00:00:00] WARN : hello world
[2023-11-21 00:00:00] ERROR : hello world

Logging to a specific strategy
import { BasaltLogger, ConsoleLoggerStrategy, FileLoggerStrategy}  from '@basalt-lab/basalt-logger';

const logger = new BasaltLogger();

logger.registerStrategies([
    ['console', new ConsoleLoggerStrategy()],
    ['file', new FileLoggerStrategy('log.txt')]
]);

logger.log('console strategy', ['console']);
logger.log('file strategy', ['file']);
logger.log('console and file strategy', ['console', 'file']);
logger.log('all strategies');

node example.js[2023-11-21 00:00:00] LOG : console strategy
[2023-11-21 00:00:00] LOG : console and file strategy
[2023-11-21 00:00:00] LOG : all strategies
cat log.txt[2023-11-21 00:00:00] LOG : file strategy
[2023-11-21 00:00:00] LOG : console and file strategy
[2023-11-21 00:00:00] LOG : all strategies