Setup code quality tooling for the monorepo: - ESLint 9 flat config with TypeScript, import ordering, and NestJS rules - Prettier with consistent formatting across all files - dependency-cruiser enforcing module boundary rules (no cross-module internals, no circular deps) - Husky + lint-staged for pre-commit hooks - Auto-fixed existing files for type imports and import ordering Co-Authored-By: Paperclip <noreply@paperclip.ing>
42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import { Injectable, type LoggerService as NestLoggerService } from '@nestjs/common';
|
|
import pino, { type Logger } from 'pino';
|
|
|
|
@Injectable()
|
|
export class LoggerService implements NestLoggerService {
|
|
private readonly logger: Logger;
|
|
|
|
constructor() {
|
|
this.logger = pino({
|
|
level: process.env['LOG_LEVEL'] ?? 'info',
|
|
transport:
|
|
process.env['NODE_ENV'] !== 'production'
|
|
? { target: 'pino-pretty', options: { colorize: true } }
|
|
: undefined,
|
|
});
|
|
}
|
|
|
|
log(message: string, context?: string): void {
|
|
this.logger.info({ context }, message);
|
|
}
|
|
|
|
error(message: string, trace?: string, context?: string): void {
|
|
this.logger.error({ context, trace }, message);
|
|
}
|
|
|
|
warn(message: string, context?: string): void {
|
|
this.logger.warn({ context }, message);
|
|
}
|
|
|
|
debug(message: string, context?: string): void {
|
|
this.logger.debug({ context }, message);
|
|
}
|
|
|
|
verbose(message: string, context?: string): void {
|
|
this.logger.trace({ context }, message);
|
|
}
|
|
|
|
child(bindings: Record<string, unknown>): Logger {
|
|
return this.logger.child(bindings);
|
|
}
|
|
}
|