/**
 * A Logger provides methods to save a developer message somewhere it can be retrieved
 * @see ILogger.getLogFile
 */
export interface ILogger {
  /**
   * default logging method, the logging level needs to be specified
   * @see LogLevel
   */
  log(level: number, message: string): Promise<void>;

  /**
   * log with level 'fatal'
   * @see LogLevel.fatal
   */
  fatal(message: string): Promise<void>;

  /**
   * log with level 'error'
   * @see LogLevel.error
   */
  error(message: string): Promise<void>;

  /**
   * log with level 'warning'
   * @see LogLevel.warning
   */
  warning(message: string): Promise<void>;

  /**
   * log with level 'notice'
   * @see LogLevel.notice
   */
  notice(message: string): Promise<void>;

  /**
   * log with level 'info'
   * @see LogLevel.info
   */
  info(message: string): Promise<void>;

  /**
   * log with level 'debug'
   * @see LogLevel.debug
   */
  debug(message: string): Promise<void>;

  /**
   * logs the error, preferably with stack trace
   * @see ILogger.getExceptionsLogFile
   */
  exception(error: Error): Promise<void>;

  /**
   * @return path to the default log file
   */
  getLogFile(): string;

  /**
   * @return path to the exceptions log file
   */
  getExceptionsLogFile(): string;
}
