logjet
Version:
Structured, async TypeScript logger with console, file, HTTP transports and NestJS support
108 lines (81 loc) ⢠3.11 kB
Markdown
is experimental and not yet production-ready.
> Use at your own risk. Breaking changes may occur at any time.
> š A powerful, framework-agnostic structured logger with JSON output, multi-transport support (console, file, HTTP), async logging, Bull-based retry queue, and optional NestJS integration.
---
## ⨠Features
- ā
**Structured JSON logs** ā ideal for observability and log aggregation
- š¦ **Multi-transport** ā supports `console`, `file`, and `HTTP` transports
- š **Retry mechanism** ā async HTTP logs are queued via Bull if delivery fails
- āļø **Log levels** ā `info`, `warn`, `error`, `debug`
- š” **Pluggable architecture** ā easily extend with custom transports
- š§± **NestJS wrapper module** ā optional `LoggerModule` for drop-in integration
---
## š¦ Installation
```bash
# install core logger
npm install logjet
# if using NestJS
npm install @nestjs/common
```
š ļø Usage
Basic Setup
```
import { Logger } from 'logjet';
const logger = new Logger({
level: 'info',
transports: [
'console',
'file',
{
type: 'http',
url: 'https://your-log-server.com/logs',
bull: {
redisUrl: 'redis://localhost:6379',
queueName: 'logjet-queue'
}
}
]
});
logger.info('Server started', { port: 3000 });
logger.error('Something failed', { error: err });
```
āļø Configuration
| Option | Type | Description |
| --------------------- | ---------------------- | ------------------------------------------------------------------ |
| `level` | `string` | Minimum log level (`debug`, `info`, `warn`, `error`) |
| `transports` | `string[] \| object[]` | List of transports (`console`, `file`, or `{ type: 'http', ... }`) |
| `filePath` | `string` | Path for file logs (only if `file` transport is used) |
| `http.url` | `string` | Target endpoint for HTTP logging |
| `http.bull.redisUrl` | `string` | Redis URL for Bull queue |
| `http.bull.queueName` | `string` | Queue name for Bull retry logic |
š NestJS Integration (Optional)
```
// app.module.ts
import { LoggerModule } from 'logjet/nest';
@Module({
imports: [
LoggerModule.forRoot({
level: 'debug',
transports: ['console', 'file']
})
],
providers: [AppService],
})
export class AppModule {}
```
Inject it anywhere using:
```
import { InjectLogger, LogjetLoggerService } from 'logjet/nest';
@Injectable()
export class SomeService {
constructor(
@InjectLogger() private readonly logger: LogjetLoggerService
) {}
someMethod() {
this.logger.warn('This is from NestJS logger');
}
}
```
š§ Tip
If using NestJS, ensure @nestjs/common is installed in your host project. logjet declares it as a peer dependency.
> ā ļø WARNING: This package