import { AxiosResponseWithTimings, uuidAxiosRequestConfig } from './utils/httpModels';
/**
 * logLevel definitions
 */
export type logLevels = 'DEBUG' | 'INFO' | 'WARNING' | 'ERROR';
/**
 *
 * Basic Example:
 *
 * ```ts
 * // set logging to debug
 * process.env.F5_CONX_CORE_LOG_LEVEL = 'DEBUG';
 *
 * // instantiate and import logger
 * import { logger } from './logger';
 *
 * // turn off console logging
 * logger.console = false;
 *
 * // create OUTPUT channel
 * const f5OutputChannel = window.createOutputChannel('f5');
 *
 * // inject vscode output into logger
 * logger.output = function (log: string) {
 *     f5OutputChannel.appendLine(log);
};
 * ```
 *
 * ```bash
 * export F5_CONX_CORE_LOG_LEVEL='DEBUG'
 * ```
 */
export default class Logger {
    /**
     * journal array of log messages
     */
    readonly journal: string[];
    /**
     * log level
     */
    logLevel: logLevels;
    /**
     * buffer log messages in the journal
     * @default true
     */
    buffer: boolean;
    /**
     * output log messages to console
     * @default true
     */
    console: boolean;
    /**
     * logging environment variable
     *
     * the "VSCODE_F5_LOG_LEVEL" of the following;
     *
     * process.env.VSCODE_F5_LOG_LEVEL = 'DEBUG';
     */
    logEnv: string;
    constructor(env: string);
    /**
     * clear/delete buffer/journal
     */
    clearLogs(): number;
    private haveLogEnv;
    /**
     *
     * log http request information depending on env logging level (info/debug)
     *
     * ex. process.env.F5_CONX_CORE_LOG_LEVEL === 'INFO/DEBUG'
     *
     * @param config
     */
    httpRequest(config: uuidAxiosRequestConfig): Promise<void>;
    /**
     *
     * log http response information depending on env logging level (info/debug)
     *
     * ex. process.env.F5_CONX_CORE_LOG_LEVEL === 'INFO/DEBUG'
     *
     * @param resp
     */
    httpResponse(resp: AxiosResponseWithTimings): Promise<void>;
    /**
     * overwritable function to allow additional output integrations
     *
     * ```ts
     * // inject vscode output into logger
     * logger.output = function (log: string) {
     *     f5OutputChannel.appendLine(log);
     * };
     * ```
     * @param x log message
     */
    output: (x: string) => void;
    /**
     * Log debug message
     */
    debug(...msg: [unknown, ...unknown[]]): void;
    /**
     * Log informational message
     */
    info(...msg: [unknown, ...unknown[]]): void;
    /**
     * Log warning message
     */
    warn(...msg: [unknown, ...unknown[]]): void;
    /**
     * Log error message
     */
    error(...msg: [unknown, ...unknown[]]): void;
    /**
     * base log function
     */
    log(level: logLevels, ...messageParts: unknown[]): void;
    private _checkLogLevel;
    private stringify;
}
