@4players/odin-common
Version:
Commonly used type definitions and utility functions across ODIN web projects
85 lines (84 loc) • 3.49 kB
TypeScript
export declare enum LogLevel {
CRITICAL = 0,
ERROR = 1,
WARN = 2,
INFO = 3,
DEBUG = 4
}
export declare const LogSymbols: {
[Level in LogLevel]: string;
};
export declare function tryParseLogLevel(text: string): LogLevel | undefined;
export interface LogSink {
filter: LogLevel;
handle(record: LogRecord): void;
}
export type ConsoleObject = Pick<typeof console, 'error' | 'warn' | 'info' | 'debug'>;
export type LogFormatter = (record: LogRecord) => string;
export declare class Formatter {
static readonly sparse: LogFormatter;
static readonly json: LogFormatter;
static readonly pretty: LogFormatter;
static readonly structured: LogFormatter;
static readonly default: LogFormatter;
private constructor();
}
export declare class ConsoleSink implements LogSink {
protected formatter: LogFormatter;
protected consoleObject: ConsoleObject;
filter: LogLevel;
constructor(formatter?: LogFormatter, filter?: LogLevel, consoleObject?: ConsoleObject);
handle(record: LogRecord): void;
}
export declare class InteractiveConsoleSink extends ConsoleSink {
handle(record: LogRecord): void;
}
export type OnLogMessage = (formattedString: string, record: LogRecord) => void;
export declare class CallbackSink implements LogSink {
protected formatter: LogFormatter;
protected cb: OnLogMessage;
filter: LogLevel;
constructor(cb: OnLogMessage, formatter?: LogFormatter, filter?: LogLevel);
handle(record: LogRecord): void;
}
export interface LoggerLike {
readonly name: string | undefined;
sinks: LogSink[];
filter: LogLevel;
parent: LoggerLike | undefined;
log(level: LogLevel, message: string, extra?: Record<string, unknown> | undefined): void;
insert(record: LogRecord): void;
readonly error: (message: string, extra?: Record<string, unknown>) => void;
readonly warn: (message: string, extra?: Record<string, unknown>) => void;
readonly info: (message: string, extra?: Record<string, unknown>) => void;
readonly debug: (message: string, extra?: Record<string, unknown>) => void;
}
export declare class Logger implements LoggerLike {
#private;
sinks: LogSink[];
filter: LogLevel;
parent: Logger | undefined;
get name(): string | undefined;
constructor(filter: LogLevel, name?: string | undefined, sinks?: LogSink[], parent?: Logger | undefined);
log(level: LogLevel, message: string, extra?: Record<string, unknown> | undefined): void;
insert(record: LogRecord): void;
readonly error: (message: string, extra?: Record<string, unknown>) => void;
readonly warn: (message: string, extra?: Record<string, unknown>) => void;
readonly info: (message: string, extra?: Record<string, unknown>) => void;
readonly debug: (message: string, extra?: Record<string, unknown>) => void;
}
export declare const GLOBAL_LOGGER: Logger;
export type LogFn = (message: string, extra?: Record<string, unknown> | undefined) => void;
export type LogWithLevelFn = (level: LogLevel, message: string, extra?: Record<string, unknown> | undefined) => void;
export declare const error: LogFn;
export declare const warn: LogFn;
export declare const info: LogFn;
export declare const debug: LogFn;
export declare const log: LogWithLevelFn;
export interface LogRecord {
readonly date: Date;
readonly level: LogLevel;
readonly logger: LoggerLike;
readonly message: string;
readonly extra: Record<string, unknown> | undefined;
}