All files / src/utils logger.ts

0% Statements 0/82
0% Branches 0/1
0% Functions 0/1
0% Lines 0/82

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83                                                                                                                                                                     
//import pino, { Logger } from 'pino'

interface LoggerOptions {
    debug: boolean;
    logFilePath?: string;
}

// Stub for external logger module not provided.
class LoggerStub {
    trace(...args: any[]): void { console.trace(...args) }
    debug(...args: any[]): void { console.debug(...args) }
    info(...args:  any[]): void { console.info(...args) }
    error(...args: any[]): void { console.error(...args) }
}

export class LoggerService {
    private logger: any // for switching pino.Logger or LoggerStub
    private debug: boolean

    constructor(options: LoggerOptions) {
        this.debug = options.debug
        const transports = []

        if (options.debug) {
            transports.push({
                target: 'pino-pretty',
                options: {
                    colorize: true,
                },
                level: 'debug',
            })
        }

        if (!!options.logFilePath) {
            transports.push({
                target: 'pino/file',
                options: {
                    destination: `@/../logs/${options.logFilePath}`,
                    mkdir: true,
                },
                level: this.debug ? 'trace' : 'info',
            })
        }

        try {
            const pino = require('pino')
            this.logger = pino({
                level: this.debug ? 'trace' : 'info',
                transport: {
                    targets: transports,
                },
            })
        } catch (error) {
            //console.error('Failed to load pino:', error)
            this.logger = new LoggerStub()
        }
    }

    log(...message: unknown[]): void {
        if (this.debug) {
            this.logger.trace(...message as [unknown[]])
        } else {
            this.logger.debug(...message as [unknown[]])
        }
    }

    info(...message: unknown[]): void {
        this.logger.info(...message as [unknown[]])
    }

    error(...message: unknown[]): void {
        this.logger.error(...message as [unknown[]])
    }

}

export const devLogger = (): LoggerService => {
    return new LoggerService({
        debug: process.env.NODE_ENV === 'development',
        logFilePath: 'dev-log.log',       
    })
}