All files / lib/dynamic-form-error dynamic-form.logger.ts

100% Statements 16/16
100% Branches 3/3
100% Functions 9/9
100% Lines 14/14

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                  1x       120x   120x   120x   120x 120x       25x       2x       2x       2x       31x           31x 28x 28x        
import { Inject, Injectable, Optional } from '@angular/core';
import { DynamicFormLibraryService } from '../dynamic-form-library/dynamic-form-library.service';
import { DynamicFormLogType } from './dynamic-form-log-type';
import { DynamicFormLogLevel } from './dynamic-form-log-level';
import { DynamicFormLoggerSettings, dynamicFormLoggerSettingsDefault, DYNAMIC_FORM_LOGGER_SETTINGS } from './dynamic-form-logger-settings';
import { DynamicFormLoggerType } from './dynamic-form-logger-type';
import { DynamicFormLoggerTypeConfig, DYNAMIC_FORM_LOGGER_TYPE_CONFIG } from './dynamic-form-logger-type-config';
 
@Injectable()
export class DynamicFormLogger {
  readonly loggerTypes: DynamicFormLoggerType[];
 
  constructor(
    private libraryService: DynamicFormLibraryService,
    @Optional() @Inject(DYNAMIC_FORM_LOGGER_TYPE_CONFIG)
    private loggerTypeConfig: DynamicFormLoggerTypeConfig,
    @Optional() @Inject(DYNAMIC_FORM_LOGGER_SETTINGS)
    readonly settings: DynamicFormLoggerSettings,
  ) {
    this.loggerTypes = this.libraryService.filterTypes(this.loggerTypeConfig);
    this.settings = this.settings || dynamicFormLoggerSettingsDefault;
  }
 
  error<LogType extends DynamicFormLogType = DynamicFormLogType>(type: LogType, message?: string, ...data: any[]): void {
    this.logForLevel(DynamicFormLogLevel.Error, type, message, ...data);
  }
 
  warning<LogType extends DynamicFormLogType = DynamicFormLogType>(type: LogType, message?: string, ...data: any[]): void {
    this.logForLevel(DynamicFormLogLevel.Warning, type, message, ...data);
  }
 
  information<LogType extends DynamicFormLogType = DynamicFormLogType>(type: LogType, message?: string, ...data: any[]): void {
    this.logForLevel(DynamicFormLogLevel.Information, type, message, ...data);
  }
 
  debug<LogType extends DynamicFormLogType = DynamicFormLogType>(type: LogType, message?: string, ...data: any[]): void {
    this.logForLevel(DynamicFormLogLevel.Debug, type, message, ...data);
  }
 
  private logEnabled(level: DynamicFormLogLevel): boolean {
    return this.settings.logLevel >= level;
  }
 
  private logForLevel<LogType extends DynamicFormLogType = DynamicFormLogType>(
    level: DynamicFormLogLevel, type: LogType, message?: string, ...data: any[]
  ): void {
    if (this.logEnabled(level)) {
      const log = { timestamp: new Date(), level, type, message, data };
      this.loggerTypes.filter(f => f.enabled).forEach(logger => logger.log(log));
    }
  }
}