import { LoggableExtraData } from './types';
interface LeveledLogMethod {
    (message: string, extraData?: Partial<LoggableExtraData>): void;
    (infoObject: {
        message: string;
    } & Partial<LoggableExtraData>): void;
}
interface CustLogger {
    errorw: LeveledLogMethod;
    infow: LeveledLogMethod;
    debugw: LeveledLogMethod;
    warnw: LeveledLogMethod;
}
export type LogOpts = {
    level?: string;
    fillExcept?: string[];
    levels?: Record<string, number>;
};
/**
 * Structured logger powered by winston
 * We are trying to create structured logging methods.
 * Whenever someone would like to log something using structured logging, they can use these methods to do so.
 * Structured logger methods:
 * - debugw
 * - infow
 * - warnw
 * - errorw
 * Note: While using levels option, we need to make sure that lowest level(debug) has a value higher than higher level(warn)
 *
 * @example
 *  const logger = structuredLogger();
 *  logger.setLogLevel('warn')
 *  logger.warn('my warning', {...})
 * @example
 *  const logger = structuredLogger({level: 'info'});
 *
 *  @example
 *  logger.infow("my error message", { destinationId: "destId", workspaceId: "wspId", destinationType: "dest_type" }) // preferred
 *  logger.infow({ message: "my error message-2", destinationId: "destId", workspaceId: "wspId",  destinationType: "dest_type" })
 *
 * @example
 * const logger = structuredLogger({levels: {error:0,warn:1,info:2,debug:3}})
 *
 * @param opts
 * @returns
 */
export declare const structuredLogger: (opts?: LogOpts) => import("winston").Logger & CustLogger & {
    setLogLevel: (level: string) => void;
    getLogLevel: (level: string) => string;
};
export {};
//# sourceMappingURL=structured-logger.d.ts.map