All files / src/services LoggerService.ts

8.33% Statements 3/36
0% Branches 0/16
0% Functions 0/9
8.33% Lines 3/36

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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167      1x                     1x               1x                                                                                                                                                                                                                                                                                                
// SPDX-License-Identifier: Apache-2.0
 
 
import {
    CHECK_FAIL,
    CHECK_WARN,
    COLOR_DIM,
    COLOR_RESET,
    DEBUG_COLOR,
    ERROR_COLOR,
    INFO_COLOR,
    TRACE_COLOR,
    WARNING_COLOR,
} from '../constants';
import { VerboseLevel } from '../types/VerboseLevel';
import { IService } from './IService';
 
/**
 * LoggerService is a service class that handles logging.
 * It implements the IService interface.
 * @public
 */
export class LoggerService implements IService{
    /**
     * The logger used by the LoggerService.
     * @private
     */
    private readonly logger: Console;
 
    /**
     * The name of the service.
     * @private
     */
    private readonly serviceName: string;
 
    /**
     * The verbosity level of the LoggerService.
     * @private
     */
    private readonly verboseLevel: number;
 
    /**
     * Creates an instance of the LoggerService.
     * @param {number} verboseLevel - The level of verbosity for the logger service.
     */
    constructor(verboseLevel: number) {
        this.serviceName = LoggerService.name;
        this.verboseLevel = verboseLevel;
        this.logger = console;
        this.trace('Logger Service Initialized!', this.serviceName);
    }
 
    /**
     * Returns the color for the message written on the terminal
     * @param verboseLevel - The level of verbosity for the logger service. 
     * @returns {string} The name of the service.
     * @public
     */
    private static pickVerbosityColor(verboseLevel: VerboseLevel): string {
        switch (verboseLevel) { 
            case VerboseLevel.ERROR:
                return ERROR_COLOR;
            case VerboseLevel.WARNING:
                return WARNING_COLOR;
            case VerboseLevel.INFO:
                return INFO_COLOR;
            case VerboseLevel.DEBUG:
                return DEBUG_COLOR;
            case VerboseLevel.TRACE:
                return TRACE_COLOR;
            default:
                return INFO_COLOR;
        }
    }
 
    /**
     * Builds the message to log.
     * @param msg - The message to log.
     * @param module - The module where the message originates.
     * @param verboseLevel - The level of verbosity for the logger service.
     * @returns {string} The message to log.
     * @private
     */
    private static messageCompute(msg: string, module: string, verboseLevel: VerboseLevel): string {
        return `${COLOR_DIM}[Hedera-Local-Node]${COLOR_RESET}${LoggerService.pickVerbosityColor(verboseLevel)} ${VerboseLevel[verboseLevel]} ${COLOR_RESET}${COLOR_DIM}(${module})${COLOR_RESET} ${msg}`;
    }
 
    /**
     * Logs a trace message.
     * @param msg - The message to log.
     * @param module - The module where the message originates.
     * @public
     */
    public trace(msg: string, module: string = ''): void {
        Iif (this.verboseLevel < VerboseLevel.TRACE) {
            return;
        }
        const msgToLog = LoggerService.messageCompute(msg, module, VerboseLevel.TRACE);
        this.writeToLog(msgToLog, module);
    }
 
    /**
     * Logs a debug message.
     * @param msg - The message to log.
     * @param module - The module where the message originates.
     * @public
     */
    public info(msg: string, module: string = ''): void {
        Iif (this.verboseLevel < VerboseLevel.INFO) {
            return;
        }
        const msgToLog = LoggerService.messageCompute(msg, module, VerboseLevel.INFO);
        this.writeToLog(msgToLog, module);
    }
 
    /**
     * Logs a warning message.
     * @param msg - The message to log.
     * @param module - The module where the message originates.
     * @public
     */
    public warn(msg: string, module: string = ''): void {
        Iif (this.verboseLevel < VerboseLevel.WARNING) {
            return;
        }
        const msgToLog = LoggerService.messageCompute(`${CHECK_WARN} ${msg}`, module, VerboseLevel.WARNING);
        this.writeToLog(msgToLog, module);
    }
 
    /**
     * 
     * @param msg - The message to log.
     * @param module - The module where the message originates.
     * @public
     */
    public error(msg: string, module: string = ''): void {
        Iif (this.verboseLevel < VerboseLevel.ERROR) {
            return;
        }
        const msgToLog = LoggerService.messageCompute(`${CHECK_FAIL} ${msg}`, module, VerboseLevel.ERROR);
        this.writeToLog(msgToLog, module);
    }
 
    /**
     * 
     * @param msg - The message to log.
     * @param module - The module where the message originates.
     * @public
     */
    public debug(msg: string, module: string = ''): void {
        Iif (this.verboseLevel < VerboseLevel.DEBUG) {
            return;
        }
        const msgToLog = LoggerService.messageCompute(msg, module, VerboseLevel.DEBUG);
        this.writeToLog(msgToLog, module);
    }
 
    /**
     * Writes a message to the log.
     * @param msg - The message to write.
     * @param module - The module where the message originates.
     */
    private writeToLog(msg: string, module: string): void {
        this.logger.log(msg);
    }
}