/**
 * @name MiddlewareArgs
 * @description Stores the arguments that are passed to the middleware.
 * @interface
 */
declare type MiddlewareArgs = {
    swaggerSpecs: any;
};
/**
 * @name LogLevel
 * @description Stores the log levels that can be used in the application.
 * @enum {string}
 * @readonly
 */
declare enum LogLevel {
    emergency = 0,
    alert = 1,
    critical = 2,
    error = 3,
    warning = 4,
    notice = 5,
    info = 6,
    debug = 7
}
/**
 * @name logLevel
 * @description The log level that is used in the application in the form of types. Can be used as a type.
 */
declare type logLevel = keyof typeof LogLevel;
/**
 * @name LogArgs
 * @description Stores the argument structure that are passed to the log(...).
 * @type
 */
declare type LogArgs = {
    level: logLevel;
    message: string;
    [key: string | number]: any;
};
/**
 * @class Logger
 * @description Serves as a wrapper for the graylog2 library and console logging.
 * @author [KryptoBlack] <https://github.com/KryptoBlack>
 * @version 1.0.0
 * @license MIT
 * @example
 * import { Logger } from 'logger';
 * let logger: Logger = new Logger("xyz-service");
 * logger.info('500 Server Failed', { status: 500 });
 * logger.close();
 * @todo Add a config to allow debug level logging to use graylog at production/staging environment.
 * @todo Handle Invalid environment in a better way.
 */
declare class Logger {
    private readonly gelfLogger;
    private NODE_ENV;
    /**
     * @name constructor
     * @description This is the constructor for the Logger class.
     * @param hostname {string}
     * @param env {number}
     * @memberof Logger
     */
    constructor(o: {
        hostname: string;
        host: string;
        port: number;
        env?: string;
    });
    /**
     * @name log
     * @description This function is used to log messages by passing the level.
     * @param level
     * @param message
     * @param meta
     * @returns void
     * @memberof Logger
     * @example
     * @todo better way to handle keyword args.
     * import { Logger } from 'logger';
     * let logger: Logger = new Logger("xyz-service");
     * logger.log(LogLevel.info, '500 Server Failed', { status: 500 });
     * logger.close();
     */
    log({ level, message, ...meta }: LogArgs): void;
    /**
     * @name serve
     * @description Serves middleware service for the logger.
     * @param {MiddlewareArgs} o
     * @returns {any}
     * @memberof Logger
     * @example
     * @todo add a strict type for return value.
     * @todo handle validation of key level in a better way.
     * import { Logger } from 'logger';
     *
     * ...
     *
     * let logger: Logger = new Logger("xyz-service");
     * const options = {
     *  definition: {
     *  openapi: "3.0.0",
     *  info: { ... },
     *  ...
     * };
     * const swaggerSpecs: object = swaggerJsdoc(options);
     * app.use(logger.serve({ swaggerSpecs: swaggerSpecs }));
     *
     * ...
     *
     */
    serve(o: MiddlewareArgs): any;
    /**
     *
     * @name console
     * @description This function is used to return console logger by level.
     * @memberof Logger
     * @param level
     */
    private console;
    /**
     * @param level {logLevel}
     * @param message {string}
     * @param meta {any}
     * @description This function is used to decide what to call the graylog function or console function.
     * @private
     * @returns void
     * @memberof Logger
     */
    private _log;
    /**
     * @name info
     * @param message
     * @param meta
     * @returns void
     * @memberof Logger
     */
    info(message: string, ...meta: any): void;
    /**
     * @name error
     * @param message
     * @param meta
     * @returns void
     * @memberof Logger
     */
    error(message: string, ...meta: any): void;
    /**
     * @name emergency
     * @param message
     * @param meta
     * @returns void
     * @memberof Logger
     */
    emergency(message: string, ...meta: any): void;
    /**
     * @name alert
     * @param message
     * @param meta
     * @returns void
     * @memberof Logger
     */
    alert(message: string, ...meta: any): void;
    /**
     * @name critical
     * @param message
     * @param meta
     * @returns void
     * @memberof Logger
     */
    critical(message: string, ...meta: any): void;
    /**
     * @name warning
     * @param message
     * @param meta
     * @returns void
     * @memberof Logger
     */
    warning(message: string, ...meta: any): void;
    /**
     * @name notice
     * @param message
     * @param meta
     * @returns void
     * @memberof Logger
     */
    notice(message: string, ...meta: any): void;
    /**
     * @name debug
     * @param message
     * @param meta
     * @returns void
     * @memberof Logger
     */
    debug(message: string, ...meta: any): void;
}
export { Logger, LogLevel, };
