argos/dmp-frontend/src/app/core/services/logging/logging-service.ts

71 lines
1.6 KiB
TypeScript

import { Injectable } from '@angular/core';
import { environment } from '../../../../environments/environment';
import { ConfigurationService } from '../configuration/configuration.service';
export enum LogLevel {
Error = 'error',
Warning = 'warning',
Info = 'info',
Debug = 'debug',
}
export type LogOutput = (level: LogLevel, ...objects: any[]) => void;
@Injectable()
export class LoggingService {
private loggingLevels: LogLevel[];
private loggingOutputs: LogOutput[] = [];
constructor(private configurationService: ConfigurationService) {
}
debug(...logs: any[]) {
this.log(LogLevel.Debug, logs);
}
info(...logs: any[]) {
this.log(LogLevel.Info, logs);
}
warn(...logs: any[]) {
this.log(LogLevel.Warning, logs);
}
error(...logs: any[]) {
this.log(LogLevel.Error, logs);
}
init() {
this.loggingLevels = this.configurationService.logging.loglevels as LogLevel[];
this.loggingOutputs.push((level: LogLevel, ...objects: any[]) => {
switch (level) {
case LogLevel.Debug:
// tslint:disable-next-line:no-console
// console.debug(objects.join(', '));
break;
case LogLevel.Info:
// tslint:disable-next-line:no-console
// console.info(objects.join(', '));
break;
case LogLevel.Warning:
// console.warn(objects.join(', '));
break;
case LogLevel.Error:
// console.error(objects.join(', '));
break;
}
});
}
private log(level: LogLevel, logs: any[]) {
if (!this.loggingLevels) { this.init(); }
if (this.configurationService.logging.enabled && this.loggingLevels.includes(level)) {
this.loggingOutputs.forEach((output) => output.apply(output, [level, logs]));
}
}
}