import { IOutputStreamOptions, OutputStream, TOutputWritable } from '../ui'; /** * Module to handle logging outputs */ export declare namespace Log { enum LOG_LEVEL { OFF = 0, TRACE = 1, DEBUG = 2, INFO = 3, WARN = 4, ERROR = 5, FATAL = 6 } type TLoggerStream = TOutputWritable; type TLogFn = (...msg: any[]) => any; /** * Basic interface for any logger implementation */ interface ILogger { name?: string; trace: TLogFn; debug: TLogFn; info: TLogFn; warn: TLogFn; error: TLogFn; fatal: TLogFn; } /** * Options for a logger instance */ interface ILoggerOptions extends IOutputStreamOptions { name?: string; level?: LOG_LEVEL; stream?: TLoggerStream; } /** * Standard logger instance for the program and its commands * @todo Allow BYO logger */ class Logger extends OutputStream implements ILogger { /** * Set a default level to be used by all logger instantantiations * @param level default level used for Logger instances */ static setDefaultLevel(level: LOG_LEVEL): typeof Logger; /** * set a default logger instance * @param logger the logger implementation to use */ static setDefaultLogger(logger: ILogger): typeof Logger; /** * Provide a logging interface to use * @param logger alternate logger to utilize */ static provide(logger: ILogger): typeof Logger; /** * Get a singleton, default logger instance. * @param options options for the default logger, when not yet instantiated */ static defaultLogger(options?: ILoggerOptions): ILogger; private static _default; private static _defaultLevel; name: string; private _level; constructor(options?: ILoggerOptions); /** * log level setter * @param level log level to set */ setLevel(level: LOG_LEVEL): Logger; /** * Trace log * @param msg messages to log */ trace(...msg: any[]): Logger; /** * Debug log * @param msg messages to log */ debug(...msg: any[]): Logger; /** * Info log * @param msg messages to log */ info(...msg: string[]): Logger; /** * Warn log * @param msg messages to log */ warn(...msg: (string | Error)[]): Logger; /** * Error log * @param msg messages to log */ error(...msg: (string | Error)[]): Logger; /** * Fatal log * @param msg messages to log */ fatal(msg: Error): Logger; /** * Write the log messages to the stream * @param msgs messages to write * @param level log level to write */ private _log; } }