import { NextRequest } from 'next/server';
import { NetlifyInfo } from './platform/netlify';
import { type RequestJSON } from './shared';
export interface LogEvent {
    level: string;
    message: string;
    fields: any;
    _time: string;
    request?: RequestReport;
    git?: any;
    source: string;
    platform?: PlatformInfo;
    vercel?: PlatformInfo;
    netlify?: NetlifyInfo;
    '@app': {
        'next-axiom-version': string;
    };
}
export declare enum LogLevel {
    debug = 0,
    info = 1,
    warn = 2,
    error = 3,
    off = 100
}
export interface RequestReport {
    startTime: number;
    endTime: number;
    statusCode?: number;
    ip?: string | null;
    region?: string | null;
    path: string;
    host?: string | null;
    method: string;
    scheme: string;
    userAgent?: string | null;
    durationMs?: number;
    details?: RequestJSON;
}
export interface PlatformInfo {
    environment?: string;
    region?: string;
    route?: string;
    source?: string;
    deploymentId?: string;
    deploymentUrl?: string;
    commit?: string;
    project?: string;
    repo?: string;
    ref?: string;
}
export type LoggerConfig = {
    args?: {
        [key: string]: any;
    };
    logLevel?: LogLevel;
    autoFlush?: boolean;
    source?: string;
    req?: any;
    prettyPrint?: typeof prettyPrint;
};
export declare class Logger {
    initConfig: LoggerConfig;
    logEvents: LogEvent[];
    throttledSendLogs: (this: any) => void;
    children: Logger[];
    logLevel: LogLevel;
    config: LoggerConfig;
    constructor(initConfig?: LoggerConfig);
    debug: (message: string, args?: {
        [key: string]: any;
    }) => void;
    info: (message: string, args?: {
        [key: string]: any;
    }) => void;
    warn: (message: string, args?: {
        [key: string]: any;
    }) => void;
    error: (message: string, args?: {
        [key: string]: any;
    }) => void;
    with: (args: {
        [key: string]: any;
    }) => Logger;
    withRequest: (req: any) => Logger;
    private _transformEvent;
    logHttpRequest(level: LogLevel, message: string, request: any, args: any): void;
    middleware<TConfig extends {
        logRequestDetails?: boolean | (keyof RequestJSON)[];
    }, TReturn = TConfig['logRequestDetails'] extends boolean | (keyof RequestJSON)[] ? Promise<void> : void>(request: NextRequest, config?: TConfig): TReturn;
    log: (level: LogLevel, message: string, args?: {
        [key: string]: any;
    }) => void;
    attachResponseStatus: (statusCode: number) => void;
    sendLogs(): Promise<any>;
    flush: () => Promise<void>;
}
export declare const log: Logger;
export declare function prettyPrint(ev: LogEvent): void;
