A flexible, extensible TypeScript logging library that works in both browser and Node.js environments. Supports multiple handlers, formatters, and log levels.
- 🌟 Works in both browser and Node.js environments
- 🎨 Customizable formatters (Text, JSON)
- 📝 Multiple handlers (Console, File, Storage)
- 🔍 Log levels (debug, info, warn, error, fatal)
- 🎯 TypeScript support
- 🧪 Well tested
- 🔄 Singleton pattern for consistent logging
- 💾 Browser storage support (localStorage/sessionStorage)
npm install @lennardgeissler/logger
import { Logger, ConsoleHandler, TextFormatter } from '@lennardgeissler/logger';
// Get logger instance
const logger = Logger.getInstance();
// Add handler with custom formatter
const handler = new ConsoleHandler();
handler.setFormatter(new TextFormatter('[{timestamp}] [{level}] {message}'));
logger.addHandler(handler);
// Start logging!
logger.info('Application started', { version: '1.0.1' });
logger.debug('Debug message');
logger.warn('Warning message', { details: 'Something went wrong' });
logger.error('Error occurred', { error: new Error('Failed to process') });
Outputs logs to the console with color support in browsers.
import { ConsoleHandler } from '@lennardgeissler/logger';
const handler = new ConsoleHandler();
logger.addHandler(handler);
Outputs logs to a file (Node.js environment).
import { FileHandler } from '@lennardgeissler/logger';
const handler = new FileHandler('app.log');
logger.addHandler(handler);
Stores logs in browser's localStorage or sessionStorage.
import { StorageHandler } from '@lennardgeissler/logger';
const handler = new StorageHandler(false, 'app-logs');
logger.addHandler(handler);
Formats logs as plain text using a customizable template.
import { TextFormatter } from '@lennardgeissler/logger';
const formatter = new TextFormatter('[{timestamp}] [{level}] {message}');
handler.setFormatter(formatter);
Formats logs as JSON strings.
import { JsonFormatter } from '@lennardgeissler/logger';
const formatter = new JsonFormatter();
handler.setFormatter(formatter);
Available log levels in order of severity:
- debug
- info
- warn
- error
- fatal
Set minimum log level:
logger.setLevel('warn'); // Only warn, error, and fatal will be logged
Create custom handlers by extending BaseHandler:
import { BaseHandler, LogMessage } from '@lennardgeissler/logger';
class CustomHandler extends BaseHandler {
handle(log: LogMessage): void {
// Your custom logging logic here
const formattedLog = this.formatter.format(log);
// ... handle the formatted log
}
}
Create custom formatters by extending BaseFormatter:
import { BaseFormatter, LogMessage } from '@lennardgeissler/logger';
class CustomFormatter extends BaseFormatter {
format(log: LogMessage): string {
// Your custom formatting logic here
return `Custom format: ${log.message}`;
}
}
See CHANGELOG.md for release history.
Contributions are welcome! If you would like to contribute, please follow these steps:
- Fork the repository.
- Clone your fork to your local machine.
- Create a new branch:
git checkout -b feature/my-new-feature
. - Make your changes and commit them:
git commit -am 'Add new feature'
. - Push your branch to your fork:
git push origin feature/my-new-feature
. - Open a pull request to merge your changes into the main repository.
This project is licensed under the MIT License - see the LICENSE file for details.
- Lennard Geissler (@LennardGeissler)