/**
 * This file is part of the @egodigital/egoose distribution.
 * Copyright (c) e.GO Digital GmbH, Aachen, Germany (https://www.e-go-digital.com/)
 *
 * @egodigital/egoose is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, version 3.
 *
 * @egodigital/egoose is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
import * as moment from 'moment';
/**
 * A log action.
 *
 * @param {LogContext} context The context.
 */
export declare type LogAction = (context: LogContext) => void;
/**
 * A log context.
 */
export interface LogContext {
    /**
     * The message.
     */
    readonly message: any;
    /**
     * The optional tag.
     */
    readonly tag?: string;
    /**
     * The timestamp.
     */
    readonly time: moment.Moment;
    /**
     * The type.
     */
    readonly type: LogType;
}
/**
 * List of log types.
 */
export declare enum LogType {
    /**
     * Emergency
     */
    Emerg = 0,
    /**
     * Alert
     */
    Alert = 1,
    /**
     * Critical
     */
    Crit = 2,
    /**
     * Error
     */
    Err = 3,
    /**
     * Warning
     */
    Warn = 4,
    /**
     * Notice
     */
    Notice = 5,
    /**
     * Informational
     */
    Info = 6,
    /**
     * Debug
     */
    Debug = 7,
    /**
     * Trace
     */
    Trace = 8
}
/**
 * A logger.
 */
export declare class Logger {
    private readonly _ACTIONS;
    /**
     * Adds a log action.
     *
     * @param {LogAction} action The action.
     *
     * @return this
     */
    addAction(action: LogAction): this;
    /**
     * Logs an alert message.
     *
     * @param {any} msg The message to log.
     * @param {string} [tag] Optional tag to log.
     *
     * @return this
     */
    alert(msg: any, tag?: string): this;
    /**
     * Logs a critical message.
     *
     * @param {any} msg The message to log.
     * @param {string} [tag] Optional tag to log.
     *
     * @return this
     */
    crit(msg: any, tag?: string): this;
    /**
     * Logs a debug message.
     *
     * @param {any} msg The message to log.
     * @param {string} [tag] Optional tag to log.
     *
     * @return this
     */
    dbg(msg: any, tag?: string): this;
    /**
     * Logs an emergency message.
     *
     * @param {any} msg The message to log.
     * @param {string} [tag] Optional tag to log.
     *
     * @return this
     */
    emerg(msg: any, tag?: string): this;
    /**
     * Logs an error message.
     *
     * @param {any} msg The message to log.
     * @param {string} [tag] Optional tag to log.
     *
     * @return this
     */
    err(msg: any, tag?: string): this;
    /**
     * Logs an info message.
     *
     * @param {any} msg The message to log.
     * @param {string} [tag] Optional tag to log.
     *
     * @return this
     */
    info(msg: any, tag?: string): this;
    /**
     * Logs a message.
     *
     * @param {LogType} type The type.
     * @param {any} msg The message to log.
     * @param {string} tag The optional tag.
     *
     * @return this
     */
    log(type: LogType, msg: any, tag?: string): this;
    /**
     * Logs a notice.
     *
     * @param {any} msg The message to log.
     * @param {string} [tag] Optional tag to log.
     *
     * @return this
     */
    note(msg: any, tag?: string): this;
    /**
     * Logs a trace message.
     *
     * @param {any} msg The message to log.
     * @param {string} [tag] Optional tag to log.
     *
     * @return this
     */
    trace(msg: any, tag?: string): this;
    /**
     * Logs a warning message.
     *
     * @param {any} msg The message to log.
     * @param {string} [tag] Optional tag to log.
     *
     * @return this
     */
    warn(msg: any, tag?: string): this;
}
/**
 * Creates a new logger instance.
 *
 * @param {LogAction[]} [actions] One or more initial actions to add.
 *
 * @return {Logger} The new instance.
 */
export declare function createLogger(...actions: LogAction[]): Logger;
