import type { LogEmitter } from './emit';
import type { LogLevel } from './levels';
import type { Report } from './report';
/** The basic interface giving access to log facilities. */
export interface Log {
    /** Log a `TRACE` message */
    trace(...args: [any, ...any]): void;
    /** Log a `DEBUG` message */
    debug(...args: [any, ...any]): void;
    /** Log an `INFO` message */
    info(...args: [any, ...any]): void;
    /** Log a `NOTICE` message */
    notice(...args: [any, ...any]): void;
    /** Log a `WARNING` message */
    warn(...args: [any, ...any]): void;
    /** Log an `ERROR` message */
    error(...args: [any, ...any]): void;
    /** Log an `ERROR` message and fail the build */
    fail(...args: [any, ...any]): never;
}
/** A {@link Logger} extends the basic {@link Log} adding some state. */
export interface Logger extends Log {
    /** The current level for logging. */
    level: LogLevel;
    /** The current indent level for logging. */
    indent: number;
    /** Enter a sub-level of logging, increasing indent */
    enter(): void;
    /** Enter a sub-level of logging, increasing indent */
    enter(evel: LogLevel, message: string): void;
    /** Leave a sub-level of logging, decreasing indent */
    leave(): void;
    /** Leave a sub-level of logging, decreasing indent */
    leave(level: LogLevel, message: string): void;
    /** Create a {@link Report} associated with this instance */
    report(title: string): Report;
}
/** Return a {@link Logger} associated with the specified task name. */
export declare function getLogger(task?: string, indent?: number): Logger;
/** Default implementation of the {@link Logger} interface. */
declare class LoggerImpl implements Logger {
    private readonly _task;
    private readonly _emitter;
    indent: number;
    private readonly _stack;
    level: LogLevel;
    constructor(_task: string, _emitter: LogEmitter, indent: number);
    private _emit;
    trace(...args: [any, ...any]): void;
    debug(...args: [any, ...any]): void;
    info(...args: [any, ...any]): void;
    notice(...args: [any, ...any]): void;
    warn(...args: [any, ...any]): void;
    error(...args: [any, ...any]): void;
    fail(...args: [any, ...any]): never;
    enter(): void;
    enter(level: LogLevel, message: string): void;
    leave(): void;
    leave(level: LogLevel, message: string): void;
    report(title: string): Report;
}
/** A test logger, writing to a buffer always _without_ colors/indent */
export declare class TestLogger extends LoggerImpl {
    private _lines;
    constructor();
    /** Return the _current_ buffer for this instance */
    get buffer(): string;
    /** Reset the buffer and return any previously buffered text */
    reset(): string;
}
export {};
