All files / src/logger LoggerFactory.ts

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                                  6x   6x 6x 6x   6x 6x 6x 6x 6x 6x 6x     6x   6x   6x 2x 2x   2x 1x       24x 24x     6x   6x           6x     6x   6x  
/**
 * Copyright 2017-2020 Plexus Interop Deutsche Bank AG
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { LoggerDelegate } from './index';
import * as log from 'loglevel';
import { Logger } from './Logger';
import { LoggerBase } from './LoggerBase';
import { TimeUtils } from '../util/time/TimeUtils';
const logPrefixer: any = require('loglevel-plugin-prefix');
 
export enum LogLevel {
  TRACE,
  DEBUG,
  INFO,
  WARN,
  ERROR,
  SILENT
}
 
export class LoggerFactory {
  
  private static additionalRecipients: LoggerDelegate[] = [];
 
  public static registerDelegate(logger: LoggerDelegate): { unregister: () => void } {
    let newRecipientsLen = LoggerFactory.additionalRecipients.push(logger);
    let registeredRecipientIndex = newRecipientsLen - 1;
 
    return {
      unregister: () => LoggerFactory.additionalRecipients = LoggerFactory.additionalRecipients.splice(registeredRecipientIndex, 1)
    };
  }
 
  public static getLogger(Iname: string = 'Anonymous'): Logger {
    return new LoggerBase(name, this.additionalRecipients);
  }
 
  public static setLogLevel(level: LogLevel): void {
    /* istanbul ignore if */
    if (level <= LogLevel.DEBUG) {
      logPrefixer.apply(log, {
        template: '%t | [%l] ',
        timestampFormatter: (date: Date) => TimeUtils.format(date)
      });
    }
    log.setLevel(level as any);
  }
 
}
 
LoggerFactory.setLogLevel(LogLevel.INFO);