/// <reference types="node" />
import { WriteStream } from "fs";
export declare type Transport = "file" | "console";
export declare type Level = "info" | "warn" | "error";
/**
 *Logger options interface
 *
 * @export
 * @interface ILoggerOptions
 */
export interface ILoggerOptions {
    transports?: Transport[];
    file?: string;
    formatter?: (message: string, level: Level) => string;
}
/**
 *
 *
 * @interface ILogger
 */
interface ILogger {
    options: ILoggerOptions;
    info: (message: string) => void;
    warn: (message: string) => void;
    error: (message: string) => void;
}
/**
 * Logger class
 *
 * @class Logger
 * @implements {ILogger}
 */
export declare class Logger implements ILogger {
    options: ILoggerOptions;
    private __fileStream;
    /**
     * Creates an instance of Logger
     * @param {ILoggerOptions} [options]
     * @memberof Logger
     */
    constructor(options?: ILoggerOptions);
    /**
     * Prints message with INFO level
     *
     * @param {string} message
     * @memberof Logger
     */
    info(message: string): void;
    /**
     * Prints message with WARN level
     *
     * @param {string} message
     * @memberof Logger
     */
    warn(message: string): void;
    /**
     * Prints message with ERROR level
     *
     * @param {string} message
     * @memberof Logger
     */
    error(message: string): void;
    /**
     * Creates log message with custom format. Default is: `new Date().toLocaleString() : [LEVEL] : message`
     *
     * @param {string} message
     * @param {Level} level
     * @returns {string} The output message
     * @memberof Logger
     */
    private __formatter;
    /**
     * Checks if file transport is selected
     *
     * @private
     * @returns {boolean}
     * @memberof Logger
     */
    private __shouldWriteToFile;
    /**
     * Checks if console transport is selected
     *
     * @private
     * @returns {boolean}
     * @memberof Logger
     */
    private __shouldWriteToConsole;
    /**
     * Creates log file if it doesn't exist
     *
     * @private
     * @memberof Logger
     */
    private __createLogFile;
    /**
     * Writes log message to file
     *
     * @private
     * @param {string} message
     * @memberof Logger
     */
    private __writeToFile;
    /**
     * Writes log message to console
     *
     * @private
     * @param {string} message
     * @param {Level} level
     * @memberof Logger
     */
    private __writeToConsole;
    /**
     * Calls appropriate method to write formatted message
     *
     * @private
     * @param {string} message
     * @param {Level} level
     * @memberof Logger
     */
    private __write;
    /**
     * Returns the log file path for this logger instance.
     *
     * @returns {string} Path of log file.
     * @memberof Logger
     */
    getLogFilePath(): string | null;
    /**
     * Returns the file stream of the log file or null if no file transport available.
     *
     * @returns {WritableStream}
     * @memberof Logger
     */
    getLogStream(): WriteStream | null;
}
export default Logger;
