71 lines
1.6 KiB
TypeScript
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]));
|
|
}
|
|
}
|
|
}
|