export type Context = unknown;
export declare class Level {
    #private;
    constructor(value: number);
    Level(): Level;
    Value(): number;
    valueOf(): number;
    toString(): string;
}
export declare const LevelDebug: Level;
export declare const LevelInfo: Level;
export declare const LevelWarn: Level;
export declare const LevelError: Level;
export interface Leveler {
    Level(): Level;
}
export declare enum Kind {
    Any = 0,
    Group = 1
}
export declare class Value {
    #private;
    constructor(kind: Kind, value: unknown);
    Kind(): Kind;
    Any(): unknown;
    Group(): Attr[];
    Resolve(): Value;
    equals(other: Value): boolean;
}
export declare class Attr {
    Key: string;
    Value: Value;
    constructor(key: string, value: Value);
    Equal(other: Attr): boolean;
}
export declare class Record {
    #private;
    Time: Date;
    Level: Level;
    Message: string;
    PC: number;
    constructor(time: Date, level: Level, message: string, pc: number);
    NumAttrs(): number;
    Attrs(fn: (attr: Attr) => boolean): void;
    AddAttrs(...attrs: Attr[]): void;
    Add(key: string, value: unknown): void;
    Clone(): Record;
}
export interface Handler {
    Enabled(ctx: Context, level: Level): boolean;
    Handle(ctx: Context, record: Record): Error | null | Promise<Error | null>;
    WithAttrs(attrs: Attr[]): Handler;
    WithGroup(name: string): Handler;
}
export declare class Logger {
    #private;
    constructor(handler: Handler);
    Enabled(ctx: Context, level: Level): boolean;
    Handler(): Handler;
    WithGroup(name: string): Logger;
    With(...args: unknown[]): Logger;
    WithAttrs(attrs: Attr[]): Logger;
    Log(ctx: Context, level: Level, message: string, ...args: unknown[]): void;
    LogAttrs(ctx: Context, level: Level, message: string, ...attrs: Attr[]): void;
    Debug(message: string, ...args: unknown[]): void;
    Info(message: string, ...args: unknown[]): void;
    Warn(message: string, ...args: unknown[]): void;
    Error(message: string, ...args: unknown[]): void;
}
export declare function New(handler: Handler): Logger;
export declare function Default(): Logger;
export declare function SetDefault(logger: Logger): void;
export declare function NewRecord(time: Date, level: Level, message: string, pc: number): Record;
export declare function Any(key: string, value: unknown): Attr;
export declare function Int(key: string, value: number): Attr;
export declare function String(key: string, value: string): Attr;
export declare function Group(key: string, ...attrs: Attr[]): Attr;
