import { CdmCorpusContext, CdmEntityDefinition, cdmLogCode, CdmManifestDefinition } from '../../internal';
/**
 * The logger class which contains logic to help format logging messages in a consistent way.
 */
export declare class Logger {
    private static readonly defaultLogger;
    static debug(ctx: CdmCorpusContext, className: string, method: string, corpusPath: string, message: string, ingestTelemetry?: boolean): void;
    static info(ctx: CdmCorpusContext, className: string, method: string, corpusPath: string, message: string): void;
    static warning(ctx: CdmCorpusContext, className: string, method: string, corpusPath: string, code: cdmLogCode, ...args: any[]): void;
    static error(ctx: CdmCorpusContext, className: string, method: string, corpusPath: string, code: cdmLogCode, ...args: any[]): void;
    /**
    * Log to the specified status level by using the status event on the corpus context (if it exists) or to the default logger.
    * The log level, className, message and path values are also added as part of a new entry to the log recorder.
    * @param level The status level to log to.
    * @param ctx The CDM corpus context.
    * @param className >The className, usually the class that is calling the method.
    * @param message The message.
    * @param method The path, usually denotes method calling this method.
    * @param defaultStatusEvent The default status event (log using the default logger).
    * @param corpusPath The corpusPath, denotes the corpus path of document.
    * @param cdmLogCode The code, denotes the code enum for a message.
    */
    private static log;
    /**
     * Formats the message into a string.
     * @param code The code, usually the enum code assigned to log message
     * @param args The args, usually have values which would be inserted into the messages
     */
    private static getMessageFromResourceFile;
    /**
     * Formats the message into a string.
     * @param className The className, usually the class that is calling the method
     * @param message The message.
     * @param path The path, usually denotes the class and method calling this method.
     * @param correlationId Optional correlation ID.
     */
    private static formatMessage;
    static ingestManifestTelemetry(manifest: CdmManifestDefinition, ctx: CdmCorpusContext, className: string, method: string, corpusPath: string): void;
    /**
     * Construct a message for the input entity data and log the message.
     * @param entity The entity to be logged.
     * @param ctx The CDM corpus context.
     * @param className Usually the class that is calling the method.
     * @param method Usually denotes method calling this method.
     * @param corpusPath Usually denotes corpus path of document.
     */
    static ingestEntityTelemetry(entity: CdmEntityDefinition, ctx: CdmCorpusContext, className: string, method: string, corpusPath: string): void;
    /**
     * Construct a message consisting of all the information about the input entity.
     * @param entity The entity to be logged.
     * @return A dictionary containing all entity info.
     */
    private static formEntityInfoDict;
    /**
     * Serialize the map and return a string.
     * @param map The map object to be serialized.
     * @return The serialized map.
     */
    private static serializeMap;
}
/**
 * Helper struct to keep few needed bits of information about the logging scope.
 * @internal
 */
export declare class TState {
    className: string;
    ctx: CdmCorpusContext;
    path: string;
    constructor(className: string, ctx: CdmCorpusContext, path: string);
}
/**
 * LoggerScope class is responsible for enabling/disabling event recording
 * and will log the scope entry/exit debug events.
 * @internal
 */
export declare class LoggerScope {
    private readonly state;
    private Time;
    private isTopLevelMethod;
    constructor(state: TState);
    /**
     * @override
     */
    dispose(): void;
}
export declare function enterScope(className: string, ctx: CdmCorpusContext, path: string): LoggerScope;
