import { Inject , Injectable , InjectionToken } from '@angular/core' ; import { createLogger , LoggerOptions } from '@expo/bunyan' ; export interface ILoggingService { trace ( msg , errObj ? , extendedObj ? ) : void ; debug ( msg , errObj ? , extendedObj ? ) : void ; info ( msg , errObj ? , extendedObj ? ) : void ; warn ( msg , errObj ? , extendedObj ? ) : void ; error ( msg , errObj ? , extendedObj ? ) : void ; } export const LOGGER_CONFIG = new InjectionToken < LoggerOptions > ( 'app.logger.config' ) ; @ Injectable ( ) export class LoggingService implements ILoggingService { private readonly logger = createLogger ( this . loggerConfig ) ; constructor ( @ Inject ( LOGGER_CONFIG ) private loggerConfig ) { } trace ( msg , obj = { } , extendedObj = { } ) { this . logger . trace ( { trace : { msg , ... obj } , ... extendedObj } , msg ) ; } debug ( msg , obj = { } , extendedObj = { } ) { this . logger . debug ( { debug : { msg , ... obj } , ... extendedObj } , msg ) ; } info ( msg , obj = { } , extendedObj = { } ) { this . logger . info ( { info : { msg , ... obj } , ... extendedObj } , msg ) ; } warn ( msg , obj = { } , extendedObj = { } ) { this . logger . warn ( { warn : { msg , ... obj } , ... extendedObj } , msg ) ; } error ( msg , obj = { } , extendedObj = { } ) { this . logger . error ( { err : { msg , ... obj } , ... extendedObj } , msg ) ; } }