UNPKG

@toreda/log

Version:

Lightweight TypeScript logger with flexible custom transports.

192 lines (191 loc) 6.45 kB
import { LogOptionsGlobal } from './log/options/global'; import { LogOptionsGroup } from './log/options/group'; import { Expand } from '@toreda/types'; import { LogStateGlobal } from './log/state/global'; import { LogStateGroup } from './log/state/group'; import { Transport } from './transport'; /** * Main log class holding attached transports and internal state * data, and logging configuration. */ export declare class Log { /** Serializable shared state data */ readonly globalState: LogStateGlobal; /** Serializable internal state data */ readonly groupState: LogStateGroup; constructor(options?: LogOptionsGroup | LogOptionsGlobal); /** * Enable global console logging for development and debugging. */ activateDefaultConsole(level?: number): void; deactivateDefaultConsole(): void; /** * Sets the level of the default console to the level * of the log. */ resetLevelDefaultConsole(): void; setLevelDefaultConsole(level: number): void; enableLevelDefaultConsole(level: number): void; disableLevelDefaultConsole(level: number): void; /** * Attempt to make new log group with target id. Does not * overwrite existing groups. * @param id id of new log. * @returns The new log if successful or null if it fails. */ makeLog(id: '', options?: MakeLogOptions): null; makeLog(id: string, options?: MakeLogOptions): Log; /** * Add transport to log. * @param transportData Transport to add to log. */ addTransport(transportData: Transport | TransportArgs): boolean; getTransport(transportId: string): Transport | null; /** * Remove transport from target group, or from the 'all' group if * id is null. * @param transport */ removeTransport(transport: Transport | null): boolean; /** * Remove transport matching target id from target group if * both the group exists and the transport is in the group. * @param transportId */ removeTransportById(transportId: string): boolean; /** * Remove multiple transports in one call by providing an array * of log transports to remove from this group. * @param transports */ removeTransports(transports: Transport[]): boolean; /** * Remove matching transports from all groups. Expensive call not suitable to * use generally, but available for specific cases where transports must be removed * and may exist in multiple unknown groups. Prefer to use use `removeTransport` or * `removeGroupTransport` when possible. * @param transport */ removeTransportEverywhere(transport: Transport): boolean; /** * All Logs become disabled without changing * the state of each log individually. */ enforceGlobalDisable(): void; /** * All Logs become enabled without changing the * state of each log individually. */ enforceGlobalEnable(): void; /** * Both global enable and disable are turned * off. Logs rely on their own setting. */ useGroupEnable(): void; /** * Enable log. */ enable(): void; /** * Disable log. */ disable(): void; /** * Change global log level. Individual group levels * are used instead of global level when they are set. * @param level */ setGlobalLevel(level: number): void; /** * Add a level flag to the global log level without * affecting other global level flags. Has no effect * if target level flag is already enabled. * @param level */ enableGlobalLevel(level: number): void; /** * Add multiple flags to global log level. Performs * sanity checks on each provided level and discards * invalid values. * @param levels */ enableGlobalLevels(levels: number[]): void; disableGlobalLevel(level: number): void; disableGlobalLevels(levels: number[]): void; /** * Set log level for target group. * @param level * @param id */ setGroupLevel(level: number): void; enableGroupLevel(level: number): void; enableGroupLevels(levels: number[]): void; disableGroupLevel(level: number): void; disableGroupLevels(levels: number[]): void; /** * Create structured log message. Provided as a call argument * during transport execution. * @param ts UTC timestamp when msg was created. * @param level Level bitmask msg was logged with. * @param msg Msg that was logged. */ private createMessage; private stringifyMessage; /** * Determine whether group transport can execute target log * message. Checks msg log level against global log level, * group log level, and transport log level. * @param transport * @param globalLevel * @param msgLevel */ private canExecute; /** * Log message to default group. * @param msgLevel * @param msg */ log(msgLevel: number, ...msg: unknown[]): Promise<boolean | LogResult>; /** * Trigger an error-level log message for no specific group (global). * @param msg */ error(...msg: unknown[]): Promise<boolean | LogResult>; /** * Trigger a warn-level log message for no specific group (global). * @param msg */ warn(...msg: unknown[]): Promise<boolean | LogResult>; /** * Trigger an info-level log message for no specific group (global). * @param args */ info(...msg: unknown[]): Promise<boolean | LogResult>; /** * Trigger a -level log message for no specific group (global). * @param msg */ debug(...msg: unknown[]): Promise<boolean | LogResult>; /** * Trigger a trace-level log message for no specific group (global). * @param args */ trace(...msg: unknown[]): Promise<boolean | LogResult>; /** * Clear all transports from this group. */ clear(): void; /** * Clear all transports from all groups. */ clearAll(): void; /** * Remove all groups except the initial group. * Clear all transport from the initial group. */ reset(): Log; } declare type LogResult = Record<string, boolean | Error>; declare type MakeLogOptions = Expand<Omit<LogOptionsGroup, 'state' | 'id' | 'parent' | 'path'>>; declare type TransportArgs = ConstructorParameters<typeof Transport>[0]; export {};