/** Define a branded type for log levels */
export type Level<N extends number> = N & {
    __brand_log_level: never;
};
/** The `TRACE` log level */
export declare const TRACE: Level<10>;
/** The `DEBUG` log level */
export declare const DEBUG: Level<20>;
/** The `INFO` log level */
export declare const INFO: Level<30>;
/** The `NOTICE` log level (our default) */
export declare const NOTICE: Level<40>;
/** The `WARN` log level */
export declare const WARN: Level<50>;
/** The `ERROR` log level */
export declare const ERROR: Level<60>;
/** The `OFF` log level (no logs are emitted) */
export declare const OFF: Level<9007199254740991>;
/**  All our known log levels */
export declare const logLevels: Readonly<{
    TRACE: Level<10>;
    DEBUG: Level<20>;
    INFO: Level<30>;
    NOTICE: Level<40>;
    WARN: Level<50>;
    ERROR: Level<60>;
    OFF: Level<9007199254740991>;
}>;
/** The type of all our known log levels */
export type LogLevels = typeof logLevels;
/** ID of each one of our log levels (upper case) */
export type LogLevelKey = keyof LogLevels;
/** Canonical name of each one of our log levels (lower case) */
export type LogLevelName = Lowercase<LogLevelKey>;
/** A type identifying all our log level numbers */
export type LogLevel = LogLevels[LogLevelKey];
/** The type identifying a recognized log level as a `string`. */
export type LogLevelString = LogLevelKey | LogLevelName;
/**
 * Convert a `string` (a {@link LogLevelString}) into a {@link LogLevel}.
 *
 * If the level specified is not a {@link LogLevelString}, the {@link NOTICE}
 * level (our default) will be returned.
 */
export declare function getLevelNumber<L extends LogLevelString>(level: L): LogLevels[Uppercase<L>];
/**
 * Convert a `number` (a {@link LogLevel}) into a {@link LogLevelName}.
 *
 * If the level specified is not precisely a {@link LogLevel}, the
 * closer {@link LogLevelName} will be returned.
 */
export declare function getLevelName<L extends LogLevel>(level: L): LogLevelName;
