diff options
Diffstat (limited to 'std/log/logger.ts')
-rw-r--r-- | std/log/logger.ts | 189 |
1 files changed, 0 insertions, 189 deletions
diff --git a/std/log/logger.ts b/std/log/logger.ts deleted file mode 100644 index bd8d8cce5..000000000 --- a/std/log/logger.ts +++ /dev/null @@ -1,189 +0,0 @@ -// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. -import { getLevelByName, getLevelName, LogLevels } from "./levels.ts"; -import type { LevelName } from "./levels.ts"; -import type { BaseHandler } from "./handlers.ts"; - -// deno-lint-ignore no-explicit-any -export type GenericFunction = (...args: any[]) => any; - -export interface LogRecordOptions { - msg: string; - args: unknown[]; - level: number; - loggerName: string; -} - -export class LogRecord { - readonly msg: string; - #args: unknown[]; - #datetime: Date; - readonly level: number; - readonly levelName: string; - readonly loggerName: string; - - constructor(options: LogRecordOptions) { - this.msg = options.msg; - this.#args = [...options.args]; - this.level = options.level; - this.loggerName = options.loggerName; - this.#datetime = new Date(); - this.levelName = getLevelName(options.level); - } - get args(): unknown[] { - return [...this.#args]; - } - get datetime(): Date { - return new Date(this.#datetime.getTime()); - } -} - -export interface LoggerOptions { - handlers?: BaseHandler[]; -} - -export class Logger { - #level: LogLevels; - #handlers: BaseHandler[]; - readonly #loggerName: string; - - constructor( - loggerName: string, - levelName: LevelName, - options: LoggerOptions = {}, - ) { - this.#loggerName = loggerName; - this.#level = getLevelByName(levelName); - this.#handlers = options.handlers || []; - } - - get level(): LogLevels { - return this.#level; - } - set level(level: LogLevels) { - this.#level = level; - } - - get levelName(): LevelName { - return getLevelName(this.#level); - } - set levelName(levelName: LevelName) { - this.#level = getLevelByName(levelName); - } - - get loggerName(): string { - return this.#loggerName; - } - - set handlers(hndls: BaseHandler[]) { - this.#handlers = hndls; - } - get handlers(): BaseHandler[] { - return this.#handlers; - } - - /** If the level of the logger is greater than the level to log, then nothing - * is logged, otherwise a log record is passed to each log handler. `msg` data - * passed in is returned. If a function is passed in, it is only evaluated - * if the msg will be logged and the return value will be the result of the - * function, not the function itself, unless the function isn't called, in which - * case undefined is returned. All types are coerced to strings for logging. - */ - private _log<T>( - level: number, - msg: (T extends GenericFunction ? never : T) | (() => T), - ...args: unknown[] - ): T | undefined { - if (this.level > level) { - return msg instanceof Function ? undefined : msg; - } - - let fnResult: T | undefined; - let logMessage: string; - if (msg instanceof Function) { - fnResult = msg(); - logMessage = this.asString(fnResult); - } else { - logMessage = this.asString(msg); - } - const record: LogRecord = new LogRecord({ - msg: logMessage, - args: args, - level: level, - loggerName: this.loggerName, - }); - - this.#handlers.forEach((handler): void => { - handler.handle(record); - }); - - return msg instanceof Function ? fnResult : msg; - } - - asString(data: unknown): string { - if (typeof data === "string") { - return data; - } else if ( - data === null || - typeof data === "number" || - typeof data === "bigint" || - typeof data === "boolean" || - typeof data === "undefined" || - typeof data === "symbol" - ) { - return String(data); - } else if (data instanceof Error) { - return data.stack!; - } else if (typeof data === "object") { - return JSON.stringify(data); - } - return "undefined"; - } - - debug<T>(msg: () => T, ...args: unknown[]): T | undefined; - debug<T>(msg: T extends GenericFunction ? never : T, ...args: unknown[]): T; - debug<T>( - msg: (T extends GenericFunction ? never : T) | (() => T), - ...args: unknown[] - ): T | undefined { - return this._log(LogLevels.DEBUG, msg, ...args); - } - - info<T>(msg: () => T, ...args: unknown[]): T | undefined; - info<T>(msg: T extends GenericFunction ? never : T, ...args: unknown[]): T; - info<T>( - msg: (T extends GenericFunction ? never : T) | (() => T), - ...args: unknown[] - ): T | undefined { - return this._log(LogLevels.INFO, msg, ...args); - } - - warning<T>(msg: () => T, ...args: unknown[]): T | undefined; - warning<T>(msg: T extends GenericFunction ? never : T, ...args: unknown[]): T; - warning<T>( - msg: (T extends GenericFunction ? never : T) | (() => T), - ...args: unknown[] - ): T | undefined { - return this._log(LogLevels.WARNING, msg, ...args); - } - - error<T>(msg: () => T, ...args: unknown[]): T | undefined; - error<T>(msg: T extends GenericFunction ? never : T, ...args: unknown[]): T; - error<T>( - msg: (T extends GenericFunction ? never : T) | (() => T), - ...args: unknown[] - ): T | undefined { - return this._log(LogLevels.ERROR, msg, ...args); - } - - critical<T>(msg: () => T, ...args: unknown[]): T | undefined; - critical<T>( - msg: T extends GenericFunction ? never : T, - ...args: unknown[] - ): T; - critical<T>( - msg: (T extends GenericFunction ? never : T) | (() => T), - ...args: unknown[] - ): T | undefined { - return this._log(LogLevels.CRITICAL, msg, ...args); - } -} |